【问题标题】:Setting transaction isolation level of MySQL设置 MySQL 的事务隔离级别
【发布时间】:2011-12-17 18:11:55
【问题描述】:

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

通过输入:

mysql> 显示变量,例如 '%isola%';

为 InnoDB 设置的默认级别是可重复读取。
如何更改隔离级别?

【问题讨论】:

    标签: mysql isolation-level


    【解决方案1】:
    SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    

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

    https://dev.mysql.com/doc/refman/8.0/en/set-transaction.html

    【讨论】:

    【解决方案2】:

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

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

    ?sessionVariables=transaction_isolation='READ-COMMITTED'

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

    【讨论】:

    • 它可能有效,但不方便。如果您需要对特定查询有更严格的级别,则需要有一个单独的数据源实例。 ORM(即Hibernate或Batis)内部的内置事务或锁定机制存在问题,它们不能保证多实例场景中的数据一致性。另一个服务器或应用程序可能会过度连接似乎被“锁定”以进行修改的数据。
    【解决方案3】:

    我的默认隔离级别也是 REPEATABLE READ,上面的例子你可以为当前会话更改它,但如果你想完全更改它,你可以尝试使用以下命令:

    SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
    

    在 Mysql 服务器版本上测试:5.7.23-0ubuntu0.18.04.1 (Ubuntu)

    【讨论】:

    • 这是不正确的,您需要添加'GLOBAL'。没有任何 SESSION 或 GLOBAL 关键字:该语句仅适用于会话中执行的下一个事务。后续事务恢复为使用命名特征的会话值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 2010-11-22
    相关资源
    最近更新 更多