(2).
READ COMMITTED ,读已提交
(3).
REPEATABLE READ ,可重复读(默认)
(4).
SERIALIZABLE ,串行化
注意:从上到下安全性逐渐升高,从下到上性能性逐渐升高
(1).
READ UNCOMMITTED ,读未提交
解释:
对应事务中,事务A对事务进行修改,但是事务B访问了事务A未提交的数据,这个情况叫做
脏读
,
事务B读到的是事务A回滚的数据
例子:
(2).
READ COMMITTED ,读已提交
解释
:
事务A第一次查询了某条记录,事务B进行了修改并且提交,事务A再次查询这条记录发现与第一次
查询结果不一致
,这种现象叫做
不可重复读
(多次读取到的结果不一致)
例子:
(3).
REPEATABLE READ ,可重复读(默认):
事务A第一次查询到的结果集,第二次以相同方式查询到的结果集,与第一次的
结果集不一致
,这种现象叫做
幻读
注意:Mysql Innodb引擎使用了间隙锁(next-key)锁住了目标行和之前的信息,解决了部分幻读问题
(MySQL中的间隙锁(Gap Lock)是一种针对InnoDB存储引擎的锁定机制,用于锁定一个范围,但不包括记录本身,主要用于防止幻读。
间隙锁只在可重复读(REPEATABLE READ)事务隔离级别下工作。
)
例子:
(4).
SERIALIZABLE ,串行化
:解决了所有数据安全问题,所有事务都是一个挨一个执行,一个事务必须等到上一个事务执行完成才可以执行,解决了所有并发安全问题。
3.查看和设置隔离级别:
这里注意Mysql事务隔离级别默认是,可重复读(
REPEATABLE READ
) ;
两个@@是表示查看系统变量。
3.1.查看:
# 全局作⽤域
SELECT @@GLOBAL.transaction_isolation;
# 会话作⽤域
SELECT @@SESSION.transaction_isolation;
# 可以看到默认的事务隔离级别是REPEATABLE-READ(可重复读)
3.2.设置: