沫言|解读数据库:深入分析MySQL中事务以及MVCC的实现原理
推荐学习
- 真真香!耗时大半个月收整全套「Java架构进阶pdf」没白费
- 全网独家的“MySQL高级知识”集合 , 骨灰级收藏 , 手慢则无
- 阿里P8MySQL , 基础/索引/锁/日志/调优都不误 , 一锅深扒端给你
什么是事务事务(Transaction)是由一系列对数据库中的数据进行访问与更新的操作所组成的一个程序执行单元 。
在同一个事务中所进行的操作 , 要么都成功 , 要么就什么都不做 。 理想中的事务必须满足四大特性 , 这就是大名鼎鼎的ACID 。
事务的ACID特性并不是所有的事务都满足ACID特性 , 比如:对于Oracle和SQL Server数据库 , 其默认隔离级别是Read COMMITTED , 就不满足I(隔离性)的要求;对于MySQL的NDB Cluster引擎来说 , 不满足D(持久性)的要求 。
A(Atomicity)-原子性原子性指的是数据库事务是不可分割的一部分 , 只有一个事务中的所有操作都成功 , 这个事务才算执行成功 , 一旦有一个操作失败 , 那么其他成功的操作也必须回滚 。 以转账1000元场景为例 , 一个转账过程就是一个事务 , 这个事务主要包括以下两步:1、从A账户扣除1000元2、将B账户中增加1000元试想 , 如果第一步成功了 , 那么第二步失败了 , 那就等于A的1000元钱直接消失了 , 相信这是任何人都不能接受的事项 , 所以数据库事务才需要保证原子性 。
C(Consistent)-一致性指的是在事务开始之前和事务结束之后 , 数据库的完整性约束都没有被破坏 , 事务执行的前后都是合法的数据状态 。
比如我们有一张表中有一个字段name建立了一个唯一约束 , 那么当我们进行事务提交或者事务回滚之后 , 这个name必须依然保证唯一 。
I(Isolation)-隔离性隔离性就是说每个事务之间的操作应该相互隔离 , 互不干扰 。 比如说一个事务提交之前对另一个事务不可见 。
隔离是一个相对抽象而复杂的概念 , 比如说事务之间的隔离性我们到底要隔离到哪种程度呢?所以 , 针对隔离 , SQL92标准定义了4种隔离级别 , 这个放在后面事务的隔离级别中介绍 。
D(Durable)-持久性持久性这个概念就比较容易理解了 , 就是说事务一旦提交成功了 , 那么就应该是持久的 , 即使是数据库重启 , 服务器宕机等情况发生 , 数据都不会丢失(当然这个不能包括因为地震等自然灾害导致的存储数据的硬盘损发生不可逆的损坏) 。
事务的管理可能很多人会说自己都感知不到MySQL的事务 , 其实这是因为MySQL事务是默认开启了自动提交的 , 因此 , 如果要感知到事务 , 我们需要关闭自动提交或者显示开启事务 。
事务的自动提交查看自动提交语句:
SHOW VARIABLES LIKE 'autocommit';-- ON表示开启了自动提交SELECT @@autocommit;-- 1表示开启了自动提交
执行如下语句关闭自动提交:SET autocommit='OFF';SET @@autocommit = 0;
不过需要注意的是 , 这种修改方式只是在当前会话窗口生效 , 对其他会话窗口是不生效的 , MySQL几乎所有变量设置都会分成两个级别 , session(会话)和global(全局)级别 , 默认就是session级别 。常用的事务控制语句
- START TRANSACTION或者BEGIN:显示的开启事务 。 需要注意的是在存储过程中只能用START TRANSACTION开启事务 , 因为存储过程本来有BEGIN…END语法 , 两者会冲突 。
- COMMIT:提交事务 。 也可以写成COMMIT WORK 。
- ROLLBACK:回滚事务 。 也可以写成ROLLBACK WORK 。
- SAVEPOINT identifier:自定义保存点 , 适用于长事务 , 可以回滚到我们自定义的位置 。
- RELEASE SAVEPOINT identifier:删除一定保存点 , 如果没有保存点的时候 , 会报错
- 中国青年报客户端|【青声视语】数据解读:中国经济加快复苏引外媒点赞
- 人民网-环保频道|专家科普解读之二:“限塑”之后,我可以用什么?
- 律师解读公司扔员工证:属公然侮辱他人,情节严重可给予拘留
- 【青声视语】数据解读:中国经济加快复苏引外媒点赞
- 李霄鹏|盘点鲁能冠军主帅,分析李霄鹏差在哪里,解读鲁能绝无可能换帅
- 专家科普解读之二:“限塑”之后,我可以用什么?
- 新华社|门诊共济是自己的"钱"给别人用了吗?权威解读来了
- 医保|医保门诊改革是拿个人的“钱”补统筹基金的窟窿吗?权威解读来了
- 上汽|上汽集团“老大难”| 半年报解读
- 央视新闻客户端|门诊共济改革是“补窟窿”吗?为啥要动个人账户的“钱”?专家解读来了