6.5 事务:InnoDB的杀手锏(四大特性:ACID)



一、事务,为什么这么重要?

1.1 诞生背景

在InnoDB存储引擎之前,开源世界没有一个特别好的带事务的免费数据库。

只能去微软买SQLServer,或者去Oracle买,非常贵,几十万上百万。

因此,当带事务的InnoDB存储引擎集成进了MySQL之后,立马火了。

1.2 事务的特性 ACID

A:一个事务,要么成功,要么失败。操作的数据,要么全部整体成功,要么全部整体失败。

C:开始、结束之间,各个状态是一致的。

I:事务与事务之间是独立的、互不影响的。

D:事务,落在数据库后,不能轻易丢失。

二、事务的原子性 Atomicity

2.1 两阶段提交:先prepare,再提交

比如,修改了5条数据,要么全部修改成功,要么全部修改失败。不能成功3条、失败2条。

因为,很长时间内,认为原子不可再分。

(真实情况是学科发展,能够再分:中子等)

2.2 事务回滚:undo log

如果事务提交不成功,就回滚。

三、事务的一致性 Consistency

在实际业务中,体现的不多。

3.1 事务的状态切换:必须是前后统一的

比如:

小明给小红转账1000元。

状态1:事务提交之前:小明:1000元。小红:0元

状态2:事务提交之后:小明:0元。 小红:1000元

上述两个状态是统一的,因为钱的总和都是1000元。

一致性这个名字起的不够好,我个人认为叫统一性会更恰当。

3.2 锁、两阶段提交

四、事务的隔离性 Isolation

隔离性是事务的四大特性中,问题最多的。因为涉及到并发版本控制。(后续会讲)

4.1 锁、undo log

比如:

我的事务1:要给小明扣款100元

别人的事务2:要给小明扣款50元

当小明的事务提交之前,别人是不能看到小明的事务操作过程:扣款100元。

别人会认为,小明还是原来那些钱。

五、事务的持久性 Durability

5.1 redo log

只要写到redo log,即四个环形文件里,就表示已经记下了。

六、知识图谱

6.1 事务的四个特性ACID,其中隔离性又分4个级别

声明:Jerry's Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 6.5 事务:InnoDB的杀手锏(四大特性:ACID)


Follow excellence, and success will chase you.