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

 更新时间:2020年03月05日 15:06:32   作者:biancheng  
在本篇文章里小编给大家整理的是关于MySQL查看和修改事务隔离级别的实例讲解,有兴趣的朋友们学习下。

查看事务隔离级别

在 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查看和修改事务隔离级别的资料请关注脚本之家其它相关文章!

相关文章

  • MACOS中忘记MySQL root密码的解决方案

    MACOS中忘记MySQL root密码的解决方案

    这篇文章主要向大家讲述的是在MAC系统中MySQL重设root密码的实际操作步骤,在实际操作中忘记MySQL root密码时常会发生的,下面就是本教程的详细内容介绍。
    2017-03-03
  • MySQL 数据库聚合查询和联合查询操作

    MySQL 数据库聚合查询和联合查询操作

    这篇文章主要介绍了MySQL 数据库聚合查询和联合查询操作,需要的朋友可以参考下
    2021-12-12
  • window10下mysql 8.0.20 安装配置方法图文教程

    window10下mysql 8.0.20 安装配置方法图文教程

    这篇文章主要为大家详细介绍了window10下mysql 8.0.20 安装配置方法图文教程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • MySQL索引失效的14种场景分享

    MySQL索引失效的14种场景分享

    作为一名后端程序员,经常会对慢查询SQL语句进行调优,而SQL语句出现慢查询,很多情况是由于索引失效造成的,本文为大家整理了14种MySQL索引失效的场景,需要的可以参考一下
    2023-05-05
  • MySQL实现免密登录的三种配置方式

    MySQL实现免密登录的三种配置方式

    我们登录MySQL的时候有时候会忘记root密码,这时我们需要免密登录,所以这篇文章给大家介绍了MySQL免密登录的三种方式,文章通过是示例代码给出了详细的配置方案,需要的朋友可以参考下
    2024-03-03
  • MySQL快速插入大量数据的解决方案和代码示例

    MySQL快速插入大量数据的解决方案和代码示例

    在这篇博客中,我们将深入探讨如何高效插入大量数据到MySQL数据库,无论你是数据库新手还是经验丰富的开发者,这篇文章都将为你提供实用的解决方案和代码示例,帮助你解决插入3万条数据需要20多秒的问题,需要的朋友可以参考下
    2024-08-08
  • mysql按照天统计报表当天没有数据填0的实现代码

    mysql按照天统计报表当天没有数据填0的实现代码

    这篇文章主要介绍了mysql按照天统计报表当天没有数据填0的实现方法,需要的朋友可以参考下
    2018-01-01
  • 详解MySQL中varchar和int隐式转换的注意事项

    详解MySQL中varchar和int隐式转换的注意事项

    这篇文章主要为大家详细介绍了MySQL中varchar和int隐式转换的注意事项,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • MySQL分区表的使用

    MySQL分区表的使用

    本文详细介绍了在MySQL中创建分区表的方法和注意事项,包括Range和List两种常见分区类型的具体操作流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • C3P0连接池+MySQL的配置及wait_timeout问题的解决方法

    C3P0连接池+MySQL的配置及wait_timeout问题的解决方法

    这篇文章主要介绍了C3P0连接池+MySQL的配置及wait_timeout问题的解决方法,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09

最新评论