MySQL的四种隔离级别
- 读未提交
- 读提交
- 可重复读
- 串行化
隔离级别可以通过MySQL的视图来实现。
读未提交
读未提交是一个事务仅修改了数据但还未提交时,本次修改可以便可被其他事务查询到变更后的值。读未提交隔离级别下,其他事务进行查询时,直接返回记录上的最新值,没有视图概念。
读提交
一个事务修改了数据且成功提交事务后,才可查询到更新后的数据。读提交隔离是开始执行SQL
语句时创建视图。
可重复读
一个事务在执行过程中查询到的数据,总是与该事务启动时看到的数据是一致的。未提交变更对其他事务也是不可见的。可重复读视图是在事务启动时创建的,整个事务期间都使用这个视图。
代码语言:javascript复制insert into user value(1,"name1");
commit;
#开启事务A
#第一次查询name
select name from user where id = 1;
#开启事务B
update user set name = "name2" where id =1;
#提交事务B
commit;
#第二次查询name
select name from user where id =1;
#提交事务A
commit;
#第三次查询name
select name from user where id =1;
在三次查询过程中,第一次查询到的数据是name1,第二次查询到的数据是name1,A事务提交后,查询到的数据是name2;
串行化
对于同一行记录,写会加写锁,读会加读锁。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。串行化直接使用加锁的方式来避免并行访问。
不同数据库默认隔离级别
不同事务隔离级别下数据库的行为不同。
- Oracle数据库的默认隔离级别是“读提交”
- MySQL的默认隔离级别是“可重复读”
注意:数据库由Oracle迁移至MySQL时需要设置默认隔离级别为读提交。
不同事务隔离级别对脏读、不可重复读、幻读的影响
此图片引用自网络