MySQL 事务隔离 [ 技术分享 ]
未提交读
对事务外是可见的,容易造成脏读,性能也不一定比其他方式好 假设table里id为1的price是100,在下面两个sql同时执行的情况下,1事务没有提交2读到的price是50,如果1事务失败,那么2读到的结果就是错的,也就是脏读
1、update table set price=price-50 where id=1;
2、select * from table where id=1; 得到的price是100;
提交读
对事务内是可见的,对外是不可见的。对外可能会出现同样的操作出现不一样的结果(不可重复读) 默认id为1的price是100;
1、update table set price=price-50 where id=1;
2、select * from table where id=1;
1操作事务没有提交2拿到的是100,执行完后拿到的是50
可重复读
可重复读,会出现幻行,mysql默认的隔离级别,MVCC机制避免了幻行现象,每操作一行数据,每行数据都会有两个隐藏列(更新版本号和删除版本号具体看MVCC机制)
可串行化:
需要锁定行,会造成锁的超时和争锁
共 0 条回复
没有找到数据。
jia253 北京-昌平
注册时间:2014-08-18
最后登录:2023-10-24
在线时长:288小时54分
最后登录:2023-10-24
在线时长:288小时54分
- 粉丝34
- 金钱4448
- 威望20
- 积分7528