Mysql——》事务的隔离级别

推荐链接:
    总结——》【Java】
    总结——》【Mysql】
    总结——》【Redis】
    总结——》【Kafka】
    总结——》【Spring】
    总结——》【SpringBoot】
    总结——》【MyBatis、MyBatis-Plus】

并发事务执行过程中可能遇到的一些问题,按照严重性来排一下序:脏读 > 不可重复读 > 幻读。
隔离级别越低,越严重的问题就越可能发生。

一、事务的隔离级别定义

事务隔离级别指的是一个事务对数据的修改与另一个并行的事务的隔离程度。

Q:数据库的事务隔离越严格越好吗?
A:数据库的事务隔离越严格,并发副作用就越小,但付出的代价也就越大,因为事务隔离本质上就是使事务在一定程度上串行化,需要根据具体的业务需求来决定使用哪种隔离级别。

二、SQL标准中的隔离级别

事务隔离级别描述脏读不可重复读幻读
未提交读 read uncommitted一个事务可以读取到其他事务未提交的数据
已提交读 read committed一个事务只能读取到其他事务已提交的数据
可重复读 repeatable read一个事务多次读取同样的数据结果是一样的
可序列化 serializable所有的事务都是串行执行,不存在事务的并发操作

三、Mysql中的隔离级别

不同的数据库厂商对SQL标准中规定的四种隔离级别支持不一样。

1、支持的隔离级别

MySQL虽然支持4种隔离级别,但与SQL标准中所规定的各级隔离级别允许发生的问题却有些出入,MySQL在REPEATABLE READ隔离级别下,是可以禁止幻读问题的发生的。

事务隔离级别描述脏读不可重复读幻读
未提交读 read uncommitted一个事务可以读取到其他事务未提交的数据
已提交读 read committed一个事务只能读取到其他事务已提交的数据
可重复读 repeatable read一个事务多次读取同样的数据结果是一样的
可序列化 serializable所有的事务都是串行执行,不存在事务的并发操作

2、查看默认的隔离级别【innodb存储引擎】

默认:REPEATABLE-READ

-- 以下3种写法都可以
show VARIABLES like 'tx_isolation';
SELECT @@tx_isolation;
SELECT @@transaction_isolation; -- MySQL 5.7.20的版本以后支持,用来替换tx_isolation

image.png

Q:innodb为什么使用RR作为默认的事务隔离级别?
A:因为innodb在RR的级别就解决幻读的问题。

3、设置指定的隔离级别【innodb存储引擎】

----------------语法----------------
SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL level;

level可选值有4个:
  REPEATABLE READ
  READ COMMITTED
  READ UNCOMMITTED
  SERIALIZABLE

GLOBAL关键字:在全局范围内影响,对当前已存在的会话无效,对之后产生的会话有效
SESSION关键字:在会话范围内影响,对当前会话中正在执行的事务无效,对当前会话之后产生的事务有效
两个关键字都不用:只对当前会话中的下一个事务有效,下一个事务执行完后,之后产生的事务恢复到之前的隔离级别

----------------示例----------------
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

四、Oracle中的隔离级别

不同的数据库厂商对SQL标准中规定的四种隔离级别支持不一样,比方说Oracle就只支持READ COMMITTED和SERIALIZABLE隔离级别。

1、支持的隔离级别

事务隔离级别描述脏读不可重复读幻读
已提交读 read committed一个事务只能读取到其他事务已提交的数据
可重复读 repeatable read一个事务多次读取同样的数据结果是一样的

2、查看默认的隔离级别

默认:read-committed

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值