暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MYSQL并发事务处理带来的问题

suger 2022-07-12
555

更新丢失(Lost Update)或者脏写

当两个或多个事务同时操作同一行数据的时候,然后基于最初选定的值更新该行时,由于每个事务不知道其他事务的存在,会发生丢失更新问题,最后的事务的更新会覆盖其他事务的更新。

脏读(Dirty Reads)

一个事务对一行数据做修改,在这个事务提交之前,这条记录的数据处于不一致的状态,也就是说修改的数据对其他事务是不可见的;但是,在不加控制的时候,另一个事务就会读取到未提交的数据,也就是脏数据,并对 数据进行修改。

一句话:事务A读取到了事务B已经修改但尚未提交的数据,还在这个数据基础上做了操作。此时,如果B 事务回滚,A读取的数据无效,不符合一致性要求。

不可重复读(Non-Repeatable Reads)

一个事务在读取某些数据后的某个时间,再去读取这些数据,去发现读取的数据已经发了改变或者被删除。这种叫不可重复读。

一句话:事务A内部的相同查询语句在不同时刻读出的结果不一致,不符合隔离性

幻读(Phantom Reads)

一个事务按照相同的查询条件去读取的数据,却发现读取到其他事务新增进去的满足查询条件的数据。这种叫幻读。

mysql事务隔离级别

“脏读”、“不可重复读”和“幻读”,其实都是数据库读一致性问题,必须由数据库提供一定的事务隔离机制 来解决


 数据库的事务隔离越严格,并发副作用越小,但付出的代价也就越大,因为事务隔离实质上就是使事务在一定程度 上“串行化”进行,这显然与“并发”是矛盾的。

数据库的事务隔离越严格,并发副作用越小,但付出的代价也就越大,因为事务隔离实质上就是使事务在一定程度 上“串行化”进行,这显然与“并发”是矛盾的。

常看当前数据库的事务隔离级别: show variables like 'tx_isolation';

设置事务隔离级别:set tx_isolation='REPEATABLE-READ';

Mysql默认的事务隔离级别是可重复读,用Spring开发程序时,如果不设置隔离级别默认用Mysql设置的隔 离级别,如果Spring设置了就用已经设置的隔离级别

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论