我想知道为当前Mysql数据库设置了什么隔离级别。怎么能找到呢?我试着在谷歌上搜索,但没有找到。
发布于 2017-01-24 11:10:40
我在google上做了一些更多的搜索,发现如果有MySQL 5.1+,那么您可以通过在下面的查询中查找隔离级别。
SELECT * FROM information_schema.session_variables
WHERE variable_name = 'tx_isolation';发布于 2020-02-09 17:45:06
检查全局事务级别(mysql8+)
SELECT @@transaction_ISOLATION;检查会话事务级别(mysql8+)
SELECT @@global.transaction_ISOLATION;发布于 2018-06-20 06:28:22
MySQL/MariaDB中可能有六个不同的事务隔离级别值--它们可能具有不同的值。它们是:
您想知道其价值的原因将决定您需要哪一个(或多个)。
同时,要注意什么时候获得的水平可以改变--有时是由你无法控制的事情改变的。
1.配置的级别
在配置文件中查找transaction-isolation条目。这可以在[mysqld]或[server]这样的部分中找到。
从默认的/etc/my.cnf开始,但是根据使用的include语句,您可能必须查看其他配置文件。请注意,mysqld可能使用命令行选项启动,告诉它忽略配置文件或使用不同的配置文件集。
2.命令行选项级别
检查mysqld进程是如何启动的。此处使用的级别将覆盖配置文件中指定的任何级别。
如果mysqld在将来以不同的方式开始,它可能会改变。
3.全球级别的
这可以通过运行SELECT @@global.tx_isolation;来检索。
这最初是在数据库启动时、命令行选项提供的级别或从配置文件中设置的。
可以通过运行set GLOBAL transaction isolation level ...来更改它。但请注意,当数据库重新启动时,任何以这种方式设置的值都会丢失。如果其他程序运行set全局命令,则可能会发生更改。
4.会话级
这可以通过运行SELECT @@tx_isolation;来检索。
创建新会话/连接时,将其设置为当前全局级别。
可以通过在该会话中运行set SESSION transaction isolation level ...来更改它。
如果您正在使用连接池,请注意它的值可能会在您身上发生变化(返回到全局级别),因为如果将连接放入池中,则可以静默终止连接并重新建立连接。
5.下一个事务级
没有办法对此进行查询。
该级别是通过运行set transaction isolation level ...来设置的,该级别将覆盖会话级别和全局级别,用于在该会话中创建的下一个事务。之后的下一个事务将恢复到使用会话级别(除非再次发出另一个set事务隔离级别命令)。
要知道这个值,您必须跟踪您是如何设置事务隔离级别的(如果您已经使用过它)。
6.当前事务级
没有办法对此进行查询。(这是MySQL bug #53341的主题。)
要知道这个值,您必须从会话级别(在创建事务时)以及在创建事务之前设置“下一个事务级别”来推断它是什么。
参考资料
https://stackoverflow.com/questions/41825832
复制相似问题