设置MySQL的事务隔离级别

Wen*_*Jun 19 mysql isolation-level

如何设置MySQL 5.1 InnoDB的隔离级别?

输入:

mysql>显示'%isola%'等变量;

InnoDB的默认级别是可重复读取.
如何更改隔离级别?

Nie*_*sol 36

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
Run Code Online (Sandbox Code Playgroud)

SESSION是可选的,只是将设置限制为当前会话.
READ UNCOMMITTED将被替换为您想要的级别.

  • 只是为了使这个答案更加完整:您可以在全局,当前会话或仅为下一个事务设置隔离级别,如下所示:http://dev.mysql.com/doc/refman/5.5/en /set-transaction.html (4认同)

小智 7

您可以设置 4 个事务隔离级别和 4 个范围,如下所示。*该文档更详细地解释了如何设置事务隔离级别,我的答案解释了如何在 MySQL 中显示事务隔离级别:

对于PERSIST范围,即使重新启动 MySQL 后事务隔离级别也不会重置:

SET PERSIST TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Run Code Online (Sandbox Code Playgroud)

或者:

SET PERSIST transaction_isolation = 'READ-UNCOMMITTED';
Run Code Online (Sandbox Code Playgroud)

或者:

SET @@PERSIST.transaction_isolation = 'READ-UNCOMMITTED';
Run Code Online (Sandbox Code Playgroud)

对于GLOBAL作用域,事务隔离级别在重启 MySQL 后会重置:

SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
Run Code Online (Sandbox Code Playgroud)

或者:

SET GLOBAL transaction_isolation = 'READ-COMMITTED';
Run Code Online (Sandbox Code Playgroud)

或者:

SET @@GLOBAL.transaction_isolation = 'READ-COMMITTED';
Run Code Online (Sandbox Code Playgroud)

对于SESSION作用域,事务隔离级别在退出 MySQL 后会重置:

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Run Code Online (Sandbox Code Playgroud)

或者:

SET SESSION transaction_isolation = 'REPEATABLE-READ';
Run Code Online (Sandbox Code Playgroud)

或者:

SET @@SESSION.transaction_isolation = 'REPEATABLE-READ';
Run Code Online (Sandbox Code Playgroud)

或者:

SET transaction_isolation = 'REPEATABLE-READ';
Run Code Online (Sandbox Code Playgroud)

如果没有范围,事务隔离级别将在执行下一个事务后重置:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Run Code Online (Sandbox Code Playgroud)

或者:

SET @@transaction_isolation = SERIALIZABLE;
Run Code Online (Sandbox Code Playgroud)


Sor*_*ter 6

将会话变量添加到连接字符串

连接 mysql 数据库时,只需将其添加到连接字符串中即可。

?sessionVariables=transaction_isolation='READ-COMMITTED'

您可以检查其他隔离级别的值。