MySQL查看和修改事务隔离级别的实例讲解
查看事务隔离级别
在MySQL中,可以通过showvariableslike'%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;
提示:在MySQL8.0.3中,tx_isolation变量被transaction_isolation变量替换了。在MySQL8.0.3版本中查询事务隔离级别,只要把上述查询语句中的tx_isolation变量替换成transaction_isolation变量即可。
修改事务隔离级别
MySQL提供了SETTRANSACTION语句,该语句可以改变单个会话或全局的事务隔离级别。语法格式如下:
SET[SESSION|GLOBAL]TRANSACTIONISOLATIONLEVEL{READUNCOMMITTED|READCOMMITTED|REPEATABLEREAD|SERIALIZABLE}
其中,SESSION和GLOBAL关键字用来指定修改的事务隔离级别的范围:
- SESSION:表示修改的事务隔离级别将应用于当前session(当前cmd窗口)内的所有事务;
- GLOBAL:表示修改的事务隔离级别将应用于所有session(全局)中的所有事务,且当前已经存在的session不受影响;
- 如果省略SESSION和GLOBAL,表示修改的事务隔离级别将应用于当前session内的下一个还未开始的事务。
任何用户都能改变会话的事务隔离级别,但是只有拥有SUPER权限的用户才能改变全局的事务隔离级别。
如果使用普通用户修改全局事务隔离级别,就会提示需要超级权限才能执行此操作的错误信息,SQL语句和运行结果如下:
C:\Users\leovo>mysql-utestuser-p Enterpassword:****** WelcometotheMySQLmonitor.Commandsendwith;or\g. YourMySQLconnectionidis41 Serverversion:5.7.29-logMySQLCommunityServer(GPL) Copyright(c)2000,2020,Oracleand/oritsaffiliates.Allrightsreserved. OracleisaregisteredtrademarkofOracleCorporationand/orits affiliates.Othernamesmaybetrademarksoftheirrespective owners. Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement. mysql>SETGLOBALTRANSACTIONISOLATIONLEVELREADUNCOMMITTED; ERROR1227(42000):Accessdenied;youneed(atleastoneof)theSUPERprivilege(s)forthisoperation mysql>SETSESSIONTRANSACTIONISOLATIONLEVELREADUNCOMMITTED; QueryOK,0rowsaffected(0.00sec)
示例1
使用SETTRANSACTION语句分别修改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)
还可以使用settx_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查看和修改事务隔离级别的实例讲解的详细内容,更多关于MySQL查看和修改事务隔离级别的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。