FAQ系列 | 修改事务隔离级别的暗门

简介: FAQ系列 | 修改事务隔离级别的暗门

0、导读

我们知道,MySQL里可以动态修改事务隔离级别(TRANSACTIOIN ISOLATION LEVEL),既可以加 GLOBAL 关键字直接修改全局的设置,也可以加 SESSION 关键字只修改当前会话的设置。那么,如果两个关键字都不加,会出现什么情况呢?

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、实验演示

为了证实上面的说法,我们可以做一个演示,详细过程见下:

T1

T2

select @@tx_isolation;

READ-COMMITTED

select @@tx_isolation;

READ-COMMITTED

set transaction isolation level SERIALIZABLE;


select @@tx_isolation;

+----------------+

| @@tx_isolation |

+----------------+

| READ-COMMITTED |


这种方式调整完后,可以看到隔离级别还是RC



select @@tx_isolation;

READ-COMMITTED

begin;

select * from t;

| a | b | c | d |

+---+---+---+---+

| 1 | 2 | 3 | 4 |



begin;

select * from t;

| a | b | c | d |

+---+---+---+---+

| 1 | 2 | 3 | 4 |

update t set d = 5 where a = 1;

被阻塞了,耐心等待中~

rollback;



Query OK, 1 row affected (13.13 sec)

Rows matched: 1 Changed: 1 Warnings: 0

等到T1执行rollback后才能继续,等了10多秒


rollback;

当前连接再次启动新事务测试

select @@tx_isolation;

READ-COMMITTED

可以看到隔离级别还是RC



select @@tx_isolation;

READ-COMMITTED

begin;

select * from t;

| a | b | c | d |

+---+---+---+---+

| 1 | 2 | 3 | 4 |



begin;

select * from t;

| a | b | c | d |

+---+---+---+---+

| 1 | 2 | 3 | 4 |


update t set d = 20 where a = 1;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

立即完成,没有阻塞

rollback;



rollback;


其中,测试表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 的设置,无需人为调整,更加方便。

            </div>
相关文章
|
编解码 定位技术 计算机视觉
多模态LLM视觉推理能力堪忧,浙大领衔用GPT-4合成数据构建多模态基准
【9月更文挑战第2天】浙江大学领衔的研究团队针对多模态大型模型(MLLM)在抽象图像理解和视觉推理上的不足,提出了一种利用GPT-4合成数据构建多模态基准的方法。该研究通过合成数据提高了MLLM处理图表、文档等复杂图像的能力,并构建了一个包含11,193条指令的基准,涵盖8种视觉场景。实验表明,这种方法能显著提升模型性能,但依赖闭源模型和高计算成本是其局限。论文详细内容见:https://arxiv.org/pdf/2407.07053
276 10
|
8月前
|
机器学习/深度学习 编解码 自动驾驶
YOLOv11改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
YOLOv11改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
277 16
YOLOv11改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
|
8月前
|
算法 安全 大数据
【算法合规新时代】企业如何把握“清朗·网络平台算法典型问题治理”专项行动?
在数字化时代,算法推动社会发展,但也带来了信息茧房、大数据杀熟等问题。中央网信办发布《关于开展“清朗·网络平台算法典型问题治理”专项行动的通知》,针对六大算法问题进行整治,明确企业需落实算法安全主体责任,建立健全审核与管理制度,并对算法进行全面审查和备案。企业应积极自查自纠,确保算法合规透明,防范风险,迎接新机遇。
|
10月前
|
监控 负载均衡 安全
什么是DDoS攻击及如何防护DDOS攻击
通过上述防护措施,企业和组织可以构建全面的DDoS防护体系,有效抵御各类DDoS攻击,确保网络和服务的稳定运行。
6924 10
|
11月前
|
人工智能 自然语言处理 搜索推荐
最新最全,2024呼叫中心十大品牌排行榜
呼叫中心作为企业与客户连结的重要桥梁,在现代商业中扮演了重要角色。本文总结出了2024年十大主流的呼叫中心品牌,它们凭借各自的技术优势与创新能力,在市场中占据重要地位。
790 3
|
11月前
|
供应链 安全 区块链
深入探索区块链技术在金融科技中的革新应用####
本文旨在探讨区块链技术如何重塑金融科技领域,通过分析其核心特性及实际应用案例,揭示该技术提升金融交易透明度、降低成本并增强安全性的潜力。不同于传统摘要仅概述研究范围与结论,本部分将简要预览文中关键论点,激发读者兴趣,为深入阅读铺垫基础。 ####
293 0
如何微信公众号中的视频保存下来
如何微信公众号中的视频保存下来
1442 0
FLBOOK、云展网、草料二维码3款电子画册制作软件深度对比
本文亲测国内主流的电子画册制作软件,为大家精心挑选了3款电子画册制作软件,以下将根据它们的功能特点、操作界面、应用范围以及价格区间进行深度分析,帮助你选择最适合自己需求的电子画册制作工具
FLBOOK、云展网、草料二维码3款电子画册制作软件深度对比
|
SQL 运维 Java
深度解析Java 9核心新特性
深度解析Java 9核心新特性
|
自然语言处理 前端开发 开发者
【Flutter前端技术开发专栏】Flutter中的国际化与本地化支持
【4月更文挑战第30天】Flutter支持国际化与本地化,借助`Intl`包和`Localizations`类,帮助开发者实现多语言应用。`Intl`提供日期、时间格式化,而`Localizations`管理不同语言环境的资源。在`pubspec.yaml`添加`intl`依赖,创建本地化资源文件并定义`LocalizationsDelegate`。通过`Localizations.of()`获取本地化资源,实现应用适应不同语言环境。
424 0
【Flutter前端技术开发专栏】Flutter中的国际化与本地化支持