Mysql中的事务

时间:2024-10-04 07:14:55
(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.设置: 
 

相关文章