在MySQL的众多存储引擎中,只有InnoDB支持事务,所有这里说的事务隔离级别指的是InnoDB下的事务隔离级别。
四种隔离级别
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交 READ-UNCOMMITTED | 可能 | 可能 | 可能 |
读已提交 READ-COMMITTED | 不可能 | 可能 | 可能 |
可重复读 REPEATABLE-READ | 不可能 | 不可能 | 可能 |
串行化 SERIALIZABLE | 不可能 | 不可能 | 不可能 |
查看
select @@tx_isolation; # 5.0以上版本
select @@transaction_isolation; # 8.0以上版本
show variables like '%_isolation%';
另外,还可以使用下列语句分别查询全局和会话的事务隔离级别
SELECT @@global.tx_isolation;
SELECT @@session.tx_isolation;
提示:在MySQL 8.0.3 中,tx_isolation 变量被 transaction_isolation 变量替换了。在 MySQL 8.0.3 版本中查询事务隔离级别,只要把上述查询语句中的 tx_isolation 变量替换成 transaction_isolation 变量即可。
修改
- MySQL 默认的隔离级别是可重复读( REPEATABLE-READ)
- 在 my.inf 文件中修改隔离级别

可以用 SET TRANSACTION 语句改变单个会话或者所有新进连接的隔离级别。
语法如下:
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
set session transaction isolation level read committed;
set global transaction isolation level read committed;
执行事务语句
begin;
select * from table where id = 1;
commit;