Mysql-如何找到事务的隔离级别
我想知道当前Mysql数据库的隔离级别是什么。你怎么知道?我试着在谷歌上搜索,但没有找到它。我在谷歌上做了更多的搜索,发现如果你有MySQL 5.1+,那么你可以在下面的查询中找到隔离级别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; +-----------------+ |
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]
或[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;