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>
相关文章
|
人工智能 开发者
解决HuggingFace模型下载难题:AI快站的高效加速服务
在AI研发领域,获取优质模型资源是关键。国内开发者常因海外服务器导致的下载困难而苦恼,尤其是大型模型下载更是耗时且充满挑战。AI快站(aifasthub.com)作为huggingface镜像网站,提供了高效的加速下载服务。它不仅解决了huggingface大模型下载的速度问题,还支持断点续传,保证下载连续性。此外,AI快站还提供全面及时更新的模型资源,是国内AI开发者的理想选择。
2095 0
|
11月前
|
机器学习/深度学习 人工智能 算法
现身说法,AI小白的大模型学习路径
写这篇文章的初衷:作为一个AI小白,把我自己学习大模型的学习路径还原出来,包括理解的逻辑、看到的比较好的学习材料,通过一篇文章给串起来,对大模型建立起一个相对体系化的认知,才能够在扑面而来的大模型时代,看出点门道。
1321 79
|
11月前
|
人工智能 前端开发 搜索推荐
研发智能化新篇章:通义灵码企业级方案与实践
《研发智能化新篇章:通义灵码企业级方案与实践》简介: 本文探讨了通义灵码在提升企业研发效能方面的核心影响和实际应用。首先分析了AIGC(人工智能生成内容)如何从个体效率、协同效率和持续化三个维度提升企业生产力。接着,通过亚信科技的实际案例,展示了其在不同场景下的智能化实践,包括智能编程助手的选型、部署及效果评估。最后,展望了未来研发智能化的发展方向,提出构建覆盖软件开发全流程的智能体工具集,以进一步降低使用门槛并提升整体效率。文中强调了通义灵码在代码补全、知识问答等方面的应用成效,并指出了企业在落地过程中面临的挑战及应对策略。
518 1
|
网络虚拟化
配置BGP/MPLS IP VPN示例
本文介绍了通过配置MPLS VPN实现分部与总部之间的通信需求。具体要求为分部1和分部2只能与总部通信,而分部之间不能通信。配置思路包括使用BGP协议传递路由,并将各分部分别划分到不同的VPN实例中(VPN1、VPN2、VPN3),通过设置RD和Target属性确保路由隔离。操作步骤涵盖设备IP地址配置、MPLS域内互通、PE上的VPN实例配置、接口绑定、MP-IBGP配置、CE与PE间的路由交换及MPLS LDP功能配置。最终验证显示,同一VPN内的CE设备可以相互通信,不同VPN的CE设备则无法通信,满足了组网需求。
配置BGP/MPLS IP VPN示例
|
存储 关系型数据库 Linux
2024 年 16 个适用于 Linux 的开源云存储软件 (上)
2024 年 16 个适用于 Linux 的开源云存储软件 (上)
2024 年 16 个适用于 Linux 的开源云存储软件 (上)
|
人工智能 自然语言处理 算法
|
安全 Linux 开发者
Linux笔记之ldd命令详解
`ldd`命令是Linux环境下一个非常实用的工具,用于显示一个程序运行时所需的共享库依赖。它帮助开发者和系统管理员快速诊断程序运行问题,特别是在处理"找不到库文件"或者"错误的库文件版本"等错误时。然而,出于安全的考虑,对于不信任的可执行文件,应该慎用 `ldd`命令,可以考虑使用其他工具如 `objdump`。总的来说,懂得如何妥善且安全地使用 `ldd`,对于维护一个稳定和高效的Linux系统来说,是非常重要的。
870 9
|
存储 弹性计算 数据库
2024最新阿里云优惠券领取入口整理、代金券查询方法和使用教程
2024最新阿里云优惠券领取入口整理、代金券查询方法和使用教程。阿里云优惠券是什么?2024年阿里云优惠券领取地址链接和使用方法。阿小云连夜整理阿里云优惠券领取入口,包括领券中心、学生无门槛300元代金券、域名优惠口令、代金券查询和使用方法
1668 7
|
机器学习/深度学习 分布式计算 大数据
运行和其他应用同时播放的实现原理
运行和其他应用同时播放的实现原理
364 1