MySQL 的四种事务隔离级别 / 如何切换 MySQL 的默认全局事务隔离级别 / 了解 session 和 global 关键字
一、查看当前 MySQL 版本号
select version();
二、查看当前全局事务隔离级别
1、MySQL5.6 及其更早的版本
select @@global.tx_isolation;
2、MySQL5.7 及更高版本
select @@global.transaction_isolation;
1、MySQL5.7 引入了 transaction_isolation 用来代替 tx_isolation,并在 MySQL8.0.3 去掉了 tx_isolation,在 MySQL5.7 及更高版本中建议使用 transaction_isolation
2、若要查看当前会话的事务隔离级别,可以去掉 global. 使用 SELECT @@transaction_isolation。同理,若只想针对当前 session 设置事务隔离级别,可将 global 关键字替换为 session
三、MySQL 的四个事务隔离级别
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
读未提交 (read-uncommitted) | 是
| 是
| 是
|
读提交 (read-committed) | 否 | 是
| 是
|
可重复读 (repeatable-read) | 否 | 否 | 是
|
串行化 (serializable) | 否 | 否 | 否 |
四、修改 MySQL 全局默认事务隔离级别
1、MySQL5.6 及其更早的版本
set global tx_isolation='read-uncommitted';
set global tx_isolation='read-committed';
set global tx_isolation='repeatable-read';
set global tx_isolation='serializable';
2、MySQL5.7 及更高版本
set global transaction_isolation='read-uncommitted';
set global transaction_isolation='read-committed';
set global transaction_isolation='repeatable-read';
set global transaction_isolation='serializable';