当前位置: 移动技术网 > IT编程>数据库>Mysql > MySQL查看和修改事务隔离级别的实例讲解

MySQL查看和修改事务隔离级别的实例讲解

2020年06月23日  | 移动技术网IT编程  | 我要评论

逍遥天仙传,神秘军官请现身,张睿和李晟

查看事务隔离级别

在 mysql 中,可以通过show variables like '%tx_isolation%'或select @@tx_isolation;语句来查看当前事务隔离级别。

查看当前事务隔离级别的 sql 语句和运行结果如下:

mysql> show variables like '%tx_isolation%';
+---------------+-----------------+
| variable_name | value      |
+---------------+-----------------+
| tx_isolation | repeatable-read |
+---------------+-----------------+
1 row in set, 1 warning (0.17 sec)
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| repeatable-read |
+-----------------+
1 row in set, 1 warning (0.00 sec)

结果显示,目前 mysql 的事务隔离级别是 repeatable-read。

另外,还可以使用下列语句分别查询全局和会话的事务隔离级别:

select @@global.tx_isolation;
select @@session.tx_isolation;

提示:在mysql 8.0.3 中,tx_isolation 变量被 transaction_isolation 变量替换了。在 mysql 8.0.3 版本中查询事务隔离级别,只要把上述查询语句中的 tx_isolation 变量替换成 transaction_isolation 变量即可。

修改事务隔离级别

mysql 提供了 set transaction 语句,该语句可以改变单个会话或全局的事务隔离级别。语法格式如下:

set [session | global] transaction isolation level {read uncommitted | read committed | repeatable read | serializable}

其中,session 和 global 关键字用来指定修改的事务隔离级别的范围:

  • session:表示修改的事务隔离级别将应用于当前 session(当前 cmd 窗口)内的所有事务;
  • global:表示修改的事务隔离级别将应用于所有 session(全局)中的所有事务,且当前已经存在的 session 不受影响;
  • 如果省略 session 和 global,表示修改的事务隔离级别将应用于当前 session 内的下一个还未开始的事务。

任何用户都能改变会话的事务隔离级别,但是只有拥有 super 权限的用户才能改变全局的事务隔离级别。

如果使用普通用户修改全局事务隔离级别,就会提示需要超级权限才能执行此操作的错误信息,sql 语句和运行结果如下:

c:\users\leovo>mysql -utestuser -p
enter password: ******
welcome to the mysql monitor. commands end with ; or \g.
your mysql connection id is 41
server version: 5.7.29-log mysql community server (gpl)
 
copyright (c) 2000, 2020, oracle and/or its affiliates. all rights reserved.
 
oracle is a registered trademark of oracle corporation and/or its
affiliates. other names may be trademarks of their respective
owners.
 
type 'help;' or '\h' for help. type '\c' to clear the current input statement.
 
mysql> set global transaction isolation level read uncommitted;
error 1227 (42000): access denied; you need (at least one of) the super privilege(s) for this operation
mysql> set session transaction isolation level read uncommitted;
query ok, 0 rows affected (0.00 sec)

示例 1

使用 set transaction 语句分别修改 session 和全局的事务隔离级别sql 语句和运行结果如下:

mysql> select @@session.tx_isolation;
+------------------------+
| @@session.tx_isolation |
+------------------------+
| serializable      |
+------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> set global transaction isolation level repeatable read;
query ok, 0 rows affected (0.00 sec)

mysql> select @@global.tx_isolation;
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| repeatable-read    |
+-----------------------+
1 row in set, 1 warning (0.00 sec)

还可以使用 set tx_isolation 命令直接修改当前 session 的事务隔离级别,sql 语句和运行结果如下:

mysql> set tx_isolation='read-committed';
query ok, 0 rows affected, 1 warning (0.00 sec)

mysql> select @@session.tx_isolation;
+------------------------+
| @@session.tx_isolation |
+------------------------+
| read-committed     |
+------------------------+
1 row in set, 1 warning (0.00 sec)

知识点补充

mysql事务隔离级别之读提交流程图

以上就是mysql查看和修改事务隔离级别的实例讲解的详细内容,更多关于mysql查看和修改事务隔离级别的资料请关注移动技术网其它相关文章!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网