Mysql5.5中Set Transaction Syntax是: - SET [GLOBAL | SESSION TRANSACTION ISOLATION LEVEL
- {
- REPEATABLE READ
- | READ COMMITTED
- | READ UNCOMMITTED
- | SERIALIZABLE
- }
Mysql5.6及以上的Set Transaction Syntax是: - SET [GLOBAL | SESSION TRANSACTION
- transaction_characteristic [, transaction_characteristic ...
-
- transaction_characteristic:
- ISOLATION LEVEL level
- | READ WRITE
- | READ ONLY
-
- level:
- REPEATABLE READ
- | READ COMMITTED
- | READ UNCOMMITTED
- | SERIALIZABLE
这条语句可以设置Isolation level,Mysql5.6以上可以通过该语句设置access mode。 该条语句包含了可选的关键字:GLOBAL和SESSION,标识了该条语句的应用范围。 1、隔离级别的范围
- 使用GLOBAL关键字,该语句的影响范围是全局的,所有后续session都会生效,当前session不会生效。
- 使用SESSION关键字,该语句影响范围是当前session的所有后续事务。
- 都不使用时,该语句影响范围是当前session的下一个事务。
设置全局默认隔离级别需要Super权限。任何session可以随便改变当前session的隔离级别(即便是在一个事务内部),也可以自由的设置下一个事务的隔离级别,但不能在一个事务内设置。 - mysql> START TRANSACTION;
- Query OK, 0 rows affected (0.02 sec)
-
- mysql> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
- ERROR 1568 (25001): Transaction isolation level can't be changed
- while a transaction is in progress
2、隔离级别的设置
对于全局默认隔离级别可以在服务器启动时,使用--transaction-isolation=level选项进行配置。Level的可选值为: READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, or SERIALIZABLE. 例如,下面设置默认隔离级别为REPEATABLE-READ,在[mysqlid]部分加入下面语句: - [mysqld
- transaction-isolation = REPEATABLE-READ
可以在运行时检查或设置global和session的事务隔离级别,可以使用tx_isolation系统变量设置: - SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
- SET GLOBAL tx_isolation='REPEATABLE-READ';
- SET SESSION tx_isolation='SERIALIZABLE';
|