怎么在MySQL中查看和修改事务隔离级别
今天就跟大家聊聊有关怎么在MySQL中查看和修改事务隔离级别,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
查看事务隔离级别
在 MySQL 中,可以通过show variables like '%tx_isolation%'或select @@tx_isolation;语句来查看当前事务隔离级别。
查看当前事务隔离级别的 SQL 语句和运行结果如下:
mysql>showvariableslike'%tx_isolation%';+---------------+-----------------+|Variable_name|Value|+---------------+-----------------+|tx_isolation|REPEATABLE-READ|+---------------+-----------------+1rowinset,1warning(0.17sec)mysql>select@@tx_isolation;+-----------------+|@@tx_isolation|+-----------------+|REPEATABLE-READ|+-----------------+1rowinset,1warning(0.00sec)
结果显示,目前 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-pEnterpassword:******WelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis41Serverversion:5.7.29-logMySQLCommunityServer(GPL)Copyright(c)2000,2020,Oracleand/oritsaffiliates.Allrightsreserved.OracleisaregisteredtrademarkofOracleCorporationand/oritsaffiliates.Othernamesmaybetrademarksoftheirrespectiveowners.Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.mysql>SETGLOBALTRANSACTIONISOLATIONLEVELREADUNCOMMITTED;ERROR1227(42000):Accessdenied;youneed(atleastoneof)theSUPERprivilege(s)forthisoperationmysql>SETSESSIONTRANSACTIONISOLATIONLEVELREADUNCOMMITTED;QueryOK,0rowsaffected(0.00sec)
示例 1
使用 SET TRANSACTION 语句分别修改 session 和全局的事务隔离级别SQL 语句和运行结果如下:
mysql>select@@session.tx_isolation;+------------------------+|@@session.tx_isolation|+------------------------+|SERIALIZABLE|+------------------------+1rowinset,1warning(0.00sec)mysql>SETGLOBALTRANSACTIONISOLATIONLEVELREPEATABLEREAD;QueryOK,0rowsaffected(0.00sec)mysql>select@@global.tx_isolation;+-----------------------+|@@global.tx_isolation|+-----------------------+|REPEATABLE-READ|+-----------------------+1rowinset,1warning(0.00sec)
还可以使用 set tx_isolation 命令直接修改当前 session 的事务隔离级别,SQL 语句和运行结果如下:
mysql>settx_isolation='READ-COMMITTED';QueryOK,0rowsaffected,1warning(0.00sec)mysql>select@@session.tx_isolation;+------------------------+|@@session.tx_isolation|+------------------------+|READ-COMMITTED|+------------------------+1rowinset,1warning(0.00sec)
知识点补充
Mysql事务隔离级别之读提交流程图
看完上述内容,你们对怎么在MySQL中查看和修改事务隔离级别有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。