mysql事务隔离级别梳理

事务

image-20220121140013173

image-20220121140039023

事务的隔离级别

  • 读未提交( Read uncommitted)
    • 一个事务可以读取另一个未提交事务的数据,最低级别,任何情况都无法保证,会造成脏读
  • 读已提交( Read committed)
    • 一个事务要等另一个事务提交后才能读取数据,可避免脏读的发生,会造成不可重复读
  • 可重复读( Repeatable read)
    • 就是在开始读取数据(事务开启)时,不再允许修改操作,可避免脏读、不可重复读的发生,但是会造成幻读
  • 串行( Serializable)
    • 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。
  • Mysq的默认隔离级别是 Repeatable read。

image-20220121140641481

当前有一个表:

查看隔离级别

show variables like '%isolation%';

image-20220121140831933

模拟事务隔离级别

开启两个窗口

image-20220121141430924

  • AB均关闭mysql的事务自动提交
set autocommit = 0;   -- 默认为1
  • 设置隔离级别
-- 设置隔离级别
/*
set session transaction isolation level 级别字符串
级别字符串:read uncommitted、read committed、repeatable read、serializable
*/
读未提交( Read uncommitted)- 脏读 -
-- 设置read uncommitted
set session transaction isolation level read uncommitted;
-- 这种隔离级别会引起脏读,A事务读取到B事务没有提交的数据

AB设置相同的隔离级别

image-20220121143421654

读已提交( Read committed) - 不可重复读 -
-- 设置read committed
set session transaction isolation level read committed;
-- 这种隔离级别会引起不可重复读,A事务在没有提交事务之前,可看到数据不一致

AB设置相同的隔离级别

image-20220121144453593

可重复读( Repeatable read) - 幻读 -
-- 设置repeatable read (MySQL默认的)
set session transaction isolation level repeatable read;
-- 这种隔离级别会引起幻读,A事务在提交之前和提交之后看到的数据不一致

AB设置相同的隔离级别

image-20220121150555269

串行( Serializable) - 效率低下 -
-- 设置serializable
set session transaction isolation level serializable;
-- 这种隔离级别比较安全,但是效率低,A事务操作表时,表会被锁起,B事务不能操作。

AB设置相同的隔离级别

image-20220121150519608

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值