MySQL事务隔离级别

2022-11-16 14:04:13 浏览数 (1)

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时需要设置默认隔离级别为读提交。

不同事务隔离级别对脏读、不可重复读、幻读的影响

此图片引用自网络

0 人点赞