「这是我参与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.而“串行化”隔离级别下直接用加锁的方式来避免并行访问
- 可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。