Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql-如何找到事务的隔离级别_Mysql_Database_Transactions - Fatal编程技术网

Mysql-如何找到事务的隔离级别

Mysql-如何找到事务的隔离级别,mysql,database,transactions,Mysql,Database,Transactions,我想知道当前Mysql数据库的隔离级别是什么。你怎么知道?我试着在谷歌上搜索,但没有找到它。我在谷歌上做了更多的搜索,发现如果你有MySQL 5.1+,那么你可以在下面的查询中找到隔离级别 SELECT * FROM information_schema.session_variables WHERE variable_name = 'tx_isolation'; 我使用以下代码段: mysql> SELECT @@TX_ISOLATION; +-----------------+ |

我想知道当前Mysql数据库的隔离级别是什么。你怎么知道?我试着在谷歌上搜索,但没有找到它。

我在谷歌上做了更多的搜索,发现如果你有MySQL 5.1+,那么你可以在下面的查询中找到隔离级别

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

我使用以下代码段:

mysql> SELECT @@TX_ISOLATION;
+-----------------+
| @@TX_ISOLATION  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set, 1 warning (0.00 sec)

MySQL/MariaDB中可能有六个不同的事务隔离级别值,它们可能有不同的值。它们是:

  • 在配置文件中定义的值
  • 用于启动mysqld的命令行选项中使用的值
  • 全局事务隔离级别
  • 会话事务隔离级别
  • 创建的下一个事务将使用的级别
  • 当前事务正在使用的级别
  • 您想知道其值的原因将决定您需要哪一个(或多个)

    同时,要意识到所获得的水平何时会发生变化——有时是由你无法控制的事情造成的

    1。配置级别

    在配置文件中查找
    事务隔离
    条目。这可以在
    [mysqld]
    [server]
    等章节中找到

    从默认的/etc/my.cnf开始,但是根据所使用的include语句,您可能需要查看其他配置文件。请注意,mysqld可能是通过命令行选项启动的,命令行选项告诉它忽略配置文件或使用不同的配置文件集

    2。命令行选项级别

    检查mysqld进程是如何启动的。此处使用的级别将覆盖配置文件中指定的任何级别

    如果mysqld在将来以不同的方式启动,它可能会改变

    3。全球层面

    可通过运行
    SELECT@@global.tx_隔离来检索此信息

    这最初是在数据库启动时设置的,设置为命令行选项或配置文件提供的级别

    可以通过运行
    设置全局事务隔离级别…
    来更改它。但是请注意,当数据库重新启动时,以这种方式设置的任何值都将丢失。如果其他程序运行set global命令,则可能会发生更改

    4。会话级别

    这可以通过运行
    SELECT@@tx\u隔离来检索

    创建新会话/连接时,会将其设置为当前全局级别

    可以通过在该会话中运行
    设置会话事务隔离级别…
    来更改它

    如果您使用的是连接池,请注意,它的值可能会在您身上发生变化(恢复到全局级别),因为如果将连接放回池中,连接可以以静默方式终止并重新建立

    5。下一交易级别

    这是无法质疑的

    此级别是通过运行
    set transaction isolation level…
    设置的,该级别将覆盖会话级别和全局级别,以便在该会话中创建下一个事务。之后的下一个事务将恢复为使用会话级别(除非再次发出另一个set transaction isolation level命令)

    要知道这个值,您必须跟踪如何使用set事务隔离级别(如果您使用过的话)

    6。当前交易级别

    这是无法质疑的。(这是本书的主题。)

    要知道这个值,您必须从会话级别(在创建事务时)以及在创建事务之前是否设置了“下一个事务级别”推断出它是什么

    参考资料

    • 在MariaDB中设置事务:

    • MySQL中的事务隔离级别:

      • 你可以

        SELECT DATABASE();      to verify you are using the database, then
        SELECT @TX_ISOLATION;    for the DB TX isolation value
        SELECT @@TX_ISOLATION;   for global TX isolation value
        
        如果您的db验证不是您认为应该的

        USE [db-you-want-to-check];
        SELECT DATABASE();    to verify current database, then
        SELECT @TX_ISOLATION;   for current database TX isolation value
        SELECT @@TX_ISOLATION;   for GLOBAL TX isolation value
        

        检查全局事务级别(mysql8+)

        检查会话事务级别(mysql8+)


        MySQL 8+

        SELECT@@transaction\u隔离;——会话

        选择@@global.transaction\u隔离;——全球

        根据MySQL 8:

        不推荐使用的tx_隔离和tx_只读系统变量 已被删除。使用事务隔离和事务只读 相反


        请注意,这个答案已经过时了。请参阅MySQL 8的其他答案。
        SELECT @@transaction_ISOLATION;
        
        SELECT @@global.transaction_ISOLATION;