01-事务
1. 简述#
Transaction Control Language 事务控制语言
事务由单独单元的一个或多个 SQL 语句组成,在这个单元中,每个 MySQL 语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条 SQL 语句一旦执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事物开始以前的状态;如果单元中的所有 SQL 语句均执行成功,则事物被顺利执行。
2. 存储引擎#
- 概念:在 MySQL 中的数据用各种不同的技术存储在文件(或内存)中;
- 通过
show engines
命令来查看 MySQL 支持的存储引擎;
- 在 MySQL 中用的最多的存储引擎有:innodb,myisam,memory 等。其中 innodb 支持事务,而 myisam、memory 等不支持事务。
3. ACID 属性#
- 【原子性(Atomicity)】原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生;
- 【一致性(Consistency)】事务必须使数据库从一个一致性状态变换到另外一个一致性状态;
- 【隔离性(Isolation)】事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰;
- 【持久性(Durability)】持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,数据将持久化到本地,除非其他事务对其进行修改。
4. 事务的分类#
4.1 隐式事务#
4.2 显式事务#
- 具有明显的开启和结束事务的标志;
- 开启事务 → 编写事务的一组逻辑操作单元 → 提交事务 | 回滚事务
SET AUTOCOMMIT = 0; START TRANSACTION; ... COMMIT / ROLLBACK;
- 事务通常以 START TRANSACTION 开始(如果 SET AUTOCOMMIT = 0,START TRANSACTION 则可省略)。以 COMMIT 或 ROLLBACK 结束。COMMIT 表示提交,即提交事务的所有操作。
具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中,事务正常结束。ROLLBACK 表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态。这里的操作指对数据库的更新操作。
5. 隔离级别#
- 事务并发问题如何发生? 当多个事务同时操作同一个数据库的相同数据时
- 事务的并发问题有哪些?
- 【脏读】对于两个事务 T1、T2,T1 读取了已经被 T2 更新但还没有被提交的字段。之后,若 T2 回滚,T1 读取的内容就是临时且无效的;
- 【不可重复读】对于两个事务T1、T2,T1 读取了一个字段,然后 T2 更新了该字段。之后, T1再次读取同一个字段,值就不同了;
- 【幻读】 对于两个事务T1、T2,T1 从一个表中读取了一个字段,然后 T2 在该表中插入了一些新的行。之后, 如果 T1 再次读取同一个表,就会多出几行;
- 如何避免事务的并发问题?
- Oracle 支持的 2 种事务隔离级别:READ COMMITED,SERIALIZABLE。Oracle 默认的事务隔离级别为:READ COMMITED;
- MySQL 支持 4 种事务隔离级别。MySQL 默认的事务隔离级别为:REPEATABLE READ;
- 每启动一个 MySQL 程序, 就会获得一个单独的数据库连接。每个数据库连接都有一个全局变量
@@tx_isolation
,表示当前的事务隔离级别。 - 相关命令
- 查看当前的隔离级别:
SELECT @@tx_isolation;
- 设置当前 MySQL 连接的隔离级别:
set transaction isolation level ???;
- 设置数据库系统的全局的隔离级别:
set global transaction isolation level ???;
- 查看当前的隔离级别:
6. 回滚点#
SAVEPOINT 断点
COMMIT TO 断点
ROLLBACK TO 断点
7. delete & truncate#
- DELETE 语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
- TRUNCATE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?