事务是如何影响你的系统(二)

116 阅读2分钟

「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

MySQL的事务隔离级别:

  • 读未提交
  • 读已提交
  • 不可重复读
  • 串行化

默认的是对于目前MySQL5.7之后的版本,默认的存储引擎是InnoDb , 默认的事务隔离级别是 可重复读;

默认的在配置文件中就可以找到

查询当前的事务隔离级别:

set transaction 设置隔离级别
 
对于session关键字 ,对于当前连接的事务,之后的事务生效

对于GLOBAL关键字,对全局设置隔离级别,设置后的事务隔离级别对所产生的数据库连接生效


不同的事务隔离级别带来的问题

事务的隔离级别脏读不可重复读幻读
读未提交可能可能可能
读已提交不可能可能可能
可重复读不可能不可能可能
串行化不可能不可能不可能
  • 1.查看当前mysql的隔离级别:
SELECT @@transaction_isolation

select @@tx_isolation  mysql 5.0的版本
​
 select @@transaction_isolation;  mysql8.0的版本;
 
 show variables like 'transaction_isolation';

mysql默认的隔离级别是:

@@transaction_isolation:
repeateable-read;

数据库里面会创建一个视图,访问的时候以视图的逻辑结果为准。

 

 1.在“可重复读”隔离级别下,这个视图是在事务启动时创建的,整个事务存在期间都用这个视图。

 2.在“读提交”隔离级别下,这个视图是在每个 SQL 语句开始执行的时候创建的。

 3.这里需要注意的是,“读未提交”隔离级别下直接返回记录上的最新值,没有视图概念;

 4.而“串行化”隔离级别下直接用加锁的方式来避免并行访问

image.png

可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。