【问题标题】:View isolation level for a query in mysql在 mysql 中查看查询的隔离级别
【发布时间】:2011-07-17 21:10:00
【问题描述】:

如何确定给定查询使用的隔离级别?执行查询后(由第 3 方应用程序执行),我想知道使用了哪个隔离级别(例如,未提交的读取)。

需要明确的是,我目前正在开发一个使用 EF4 针对 mysql 5.1 运行的应用程序。我正在尝试测试不同的编码模式以更改特定 EF4 查询的隔离级别。我需要能够测试并确保隔离级别设置正确。

【问题讨论】:

    标签: mysql entity-framework-4 locking isolation-level


    【解决方案1】:
    SHOW VARIABLES LIKE 'tx_isolation';
    

    或者如果你有 MySQL 5.1+

    SELECT * FROM information_schema.session_variables
    WHERE variable_name = 'tx_isolation';
    

    如果你想知道服务器全局配置了什么,把上面的改成如下:

    SHOW GLOBAL VARIABLES LIKE 'tx_isolation';
    

    或者如果你有 MySQL 5.1+

    SELECT * FROM information_schema.global_variables
    WHERE variable_name = 'tx_isolation';
    

    如果您想让查询显示正在使用的事务隔离,请运行以下命令:

    SELECT variable_value IsolationLevel
    FROM information_schema.session_variables
    WHERE variable_name = 'tx_isolation';
    

    免责声明:我不知道 EF4

    如果您被允许在即将由 EF4 运行的 SQL 中嵌入子查询,您可能必须将此查询嵌入为子查询(或将您的查询嵌入为子查询)并显示变量 IsolationLevel 以及结果实际查询。

    【讨论】:

    • 如何将该查询的结果映射到具有该隔离级别的实际查询?
    • 在同一个数据库连接中启动实际查询之前运行此查询
    • 第 3 方应用程序正在运行我要测试的查询。所以我不能在同一个数据库连接中这样做。
    • 使用 mysql 客户端连接到 MySQL 并运行 "SELECT * FROM information_schema.global_variables WHERE variable_name='tx_isolation' 而不是查询 session_variables 表。我会更新我的答案。
    • 关于我的最后一个答案,我有一个问题。您是否知道第 3 方应用程序是否将隔离级别更改为与全局设置不同的级别,或者是否所有查询都在全局设置所指定的相同隔离级别上运行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2010-12-04
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多