首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何显示事务隔离级别(MySQL)

如何显示事务隔离级别(MySQL)
EN

Stack Overflow用户
提问于 2017-01-24 10:31:43
回答 8查看 25.5K关注 0票数 16

我想知道为当前Mysql数据库设置了什么隔离级别。怎么能找到呢?我试着在谷歌上搜索,但没有找到。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2017-01-24 11:10:40

我在google上做了一些更多的搜索,发现如果有MySQL 5.1+,那么您可以通过在下面的查询中查找隔离级别。

代码语言:javascript
复制
SELECT * FROM information_schema.session_variables
WHERE variable_name = 'tx_isolation';
票数 6
EN

Stack Overflow用户

发布于 2020-02-09 17:45:06

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

代码语言:javascript
复制
SELECT @@transaction_ISOLATION;

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

代码语言:javascript
复制
SELECT @@global.transaction_ISOLATION;
票数 24
EN

Stack Overflow用户

发布于 2018-06-20 06:28:22

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

  1. 在配置文件中定义的值。
  2. 用于启动mysqld的命令行选项中使用的值。
  3. 全局事务隔离级别。
  4. 会话事务隔离级别。
  5. 所创建的下一个事务将使用的级别。
  6. 当前事务所使用的级别。

您想知道其价值的原因将决定您需要哪一个(或多个)。

同时,要注意什么时候获得的水平可以改变--有时是由你无法控制的事情改变的。

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的主题。)

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

参考资料

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41825832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档