0、导读
1、调整事务隔离级别MySQL里,可以直接用 SET 指令调整事务隔离级别,既可以对全局调整,也可以只调整当前会话,其用法见下: SET [GLOBAL | SESSION] TRANSACTION [ REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE ] 我们都知道指定 GLOBAL 关键字是可以修改全局的设置,用这个方式修改完后,已经存在的连接还不会生效,只有对新建立的连接才会起作用。 而指定 SESSION 关键字则是只修改当前连接会话的设置,修改完后立即生效,再次连接后会恢复成全局的设置,对其他连接/会话也不起作用。 另外,如果都不指定 GLOBAL、SESSION 关键字,会发生什么情况呢?官方文档给出的解释是这样的: Without any SESSION or GLOBAL keyword, the statement applies to the next (not started) transaction performed within the current session. Subsequent transactions revert to using the SESSION isolation level. 原文详见手册:13.3.6 SET TRANSACTION Syntax,出处链接:https://dev.mysql.com/doc/refman/5.6/en/set-transaction.html 意思是说:采用这种方式设置后,本次连接当前事务还未起作用,要到下一个(尚未启动的)新事务才起作用,下一个事务结束后,又将恢复成本次 SESSION中原先的设置。 2、实验演示为了证实上面的说法,我们可以做一个演示,详细过程见下:
其中,测试表t的建表DDL: CREATE TABLE `t` ( `a` int(11) NOT NULL, `b` int(11) NOT NULL, `c` int(11) NOT NULL, `d` int(11) NOT NULL, PRIMARY KEY (`a`,`b`), KEY `i_c` (`c`) ) ENGINE=InnoDB; 该表中只有一条记录: SELECT * FROM t; --- --- --- --- | a | b | c | d | --- --- --- --- | 1 | 2 | 3 | 4 | --- --- --- --- 3、建议如果需要全局调整事务隔离级别,最好是在 my.cnf 全局配置文件中直接设置好。 而如果是要在当前会话中临时调整,可以不要加上 SESSION 关键字,这样的话,当前事务结束下一个新事务开始后,会自行恢复 SESSION 的设置,无需人为调整,更加方便。 关于MySQL的方方面面大家想了解什么,可以直接留言回复,我会从中选择一些热门话题进行分享。 同时希望大家多多转发,多一些阅读量是老叶继续努力分享的绝佳助力,谢谢大家 :) 最后打个广告,运维圈人士专属铁观音茶叶微店上线了,访问:http://yejinrong.com获得专属优惠 本文转载自:微信公众账号 - MySQL中文网,版权归原作者所有! | ||||||||||||||||||||||||||||||||||
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
| ||||||||||||||||||||||||||||||||||