MySQL–可重复读可重复读–需谨慎陷阱需谨慎陷阱
MySQL事务的默认隔离级别:可重复读;
现象:
1:假设有两个进程A和B,同时读取了同一行数据name的初始值都是200,B开启事务对200减50,尚未提交事务;
2,此时A重新读取name数值,肯定还是200而不是150,因为B尚未提交,此时如果在代码层面对name进行减50然后进行
update,会有什么问题呢?
答案:此时数据库的值就会产生错误值150,减了两次,为什么还是150呢?
原因:由于MySQL的事务默认隔离级别是可重复读,A开启事务之后,A不论select多少次,此时读的数据并不是数据库层面
的真是数据,而是快照数据,每次都是一样的,所以产生了上述问题。
解决办法:更新数据由代码层面改为直接SQL语句进行加减,问题即可解决,因为update语句在更新时会取数据库的真实数
据进行更新,不会再使用快照数据;
作者:Michael_LXQ
评论10