jia253 2019-03-04 17:59:28 1286次浏览 0条回复 1 0 0

未提交读

对事务外是可见的,容易造成脏读,性能也不一定比其他方式好 假设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机制)

可串行化:

需要锁定行,会造成锁的超时和争锁

    没有找到数据。
您需要登录后才可以回复。登录 | 立即注册