提问人:Wen Jun 提问时间:10/29/2011 最后编辑:Super Kai - Kazuya ItoWen Jun 更新时间:11/18/2023 访问量:74592
如何设置事务隔离级别(MySQL)
How to set transaction isolation level (MySQL)
问:
如何设置 MySQL 5.1 InnoDB 的隔离级别?
通过输入:
mysql>显示变量,如 '%isola%';
为 InnoDB 设置的默认级别是可重复读取。
如何更改隔离级别?
答:
65赞
Niet the Dark Absol
10/29/2011
#1
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SESSION
是可选的,只是将设置限制为当前会话。
将替换为您想要的级别。READ UNCOMMITTED
https://dev.mysql.com/doc/refman/8.0/en/set-transaction.html
评论
8赞
alexpirine
2/8/2013
为了使这个答案更加完整:您可以全局设置隔离级别,为当前会话设置隔离级别,也可以仅为下一个事务设置隔离级别,如下所述: dev.mysql.com/doc/refman/5.5/en/set-transaction.html
-2赞
atrichkov
9/18/2018
#2
我的默认隔离级别也是 REPEATABLE READ,在上面的示例中,您可以针对当前会话更改它,但如果您想完全更改它,您可以尝试使用此命令:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
在 Mysql 服务器版本上测试:5.7.23-0ubuntu0.18.04.1 (Ubuntu)
评论
3赞
GoYun.Info
2/27/2021
这是不正确的,您需要添加“GLOBAL”。不带任何 SESSION 或 GLOBAL 关键字:该语句仅适用于在会话中执行的下一个单个事务。后续事务将恢复为使用指定特征的会话值。
0赞
akostadinov
5/31/2023
@GoYun.Info ,这很有用,我一直在寻找,谢谢。
6赞
Sorter
4/25/2020
#3
将会话变量添加到连接字符串
在连接到 mysql 数据库时,只需将其添加到连接字符串中即可。
?sessionVariables=transaction_isolation='READ-COMMITTED'
您可以检查其他隔离级别的值。
评论
0赞
Andrey Doloka
3/29/2021
它可能有效,但不方便。如果您需要对特定查询进行更严格的级别,则需要具有单独的数据源。ORM(即 Hibernate 或 Batis)内部的内置事务或锁定机制存在问题,它们不能保证多实例场景中的数据一致性。另一个服务器或应用程序可能会过度连接似乎被“锁定”以进行修改的数据。
7赞
Super Kai - Kazuya Ito
9/14/2022
#4
您可以设置 4 个事务隔离级别和 4 个作用域,如下所示。*文档更详细地解释了如何设置事务隔离级别,我的回答解释了如何在MySQL中显示事务隔离级别:
使用PERSIST作用域,即使在重新启动MySQL后也不会重置事务隔离级别:
SET PERSIST TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
艺术
SET PERSIST transaction_isolation = 'READ-UNCOMMITTED';
艺术
SET @@PERSIST.transaction_isolation = 'READ-UNCOMMITTED';
使用GLOBAL作用域时,重新启动MySQL后会重置事务隔离级别:
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
艺术
SET GLOBAL transaction_isolation = 'READ-COMMITTED';
艺术
SET @@GLOBAL.transaction_isolation = 'READ-COMMITTED';
使用SESSION作用域时,注销MySQL后会重置事务隔离级别:
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
艺术
SET SESSION transaction_isolation = 'REPEATABLE-READ';
艺术
SET @@SESSION.transaction_isolation = 'REPEATABLE-READ';
艺术
SET transaction_isolation = 'REPEATABLE-READ';
如果没有作用域,则在执行下一个单个事务后,将重置事务隔离级别:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
艺术
SET @@transaction_isolation = SERIALIZABLE;
评论