诚意满满之讲透事务

诚意满满系列每一篇都是精挑细选,从大众知识点到原理再到具体实现,争取把一个知识点从头到尾完整讲下来,足以应付面试与工作。让读者读完之后能够有一种:“这个知识我看这一篇就够了”的感觉是本系列最大愿望。

对于本人而言,在之前的学习中也发现,八股文讲得细致但不系统,而系统的学习往往又宽泛不细致,所以也打算取长补短,互相结合一下,欢迎大家收藏关注,持续更新。

事务

事务的常见定义:

事务是一种用于管理数据库操作的机制,它可以确保数据库的一组操作要么全部成功执行,要么全部回滚到初始状态,保证数据的一致性和完整性

换个角度来说,事务相当于将多个操作合并成一个操作,这个操作只有成功和失败两种结果,没有中间状态,就跟cpu指令一样,一个指令要么不执行,要么完全执行。当然,这么说是理想状态(懂得都懂),实际上不同的事务隔离级别会有不同效果,后文会详细讲到。

事务的四个特性:

  1. 原子性(Atomicity):事务中的所有操作要么都成功完成,要么都失败回滚。即事务是不可分割的,要么全部执行,要么全部不执行,不会出现部分执行的情况。

  2. 一致性(Consistency):事务的执行不会破坏数据库的一致性约束。在事务开始前和结束后,数据库的状态必须满足一定的一致性规则。

  3. 隔离性(Isolation):同一时间多个并发事务的执行互不干扰,每个事务都认为它是唯一正在执行的事务。事务的隔离性可以防止并发执行事务时出现脏读、不可重复读和幻读的问题。

  4. 持久性(Durability):一旦事务提交,其所做的修改将被永久保存在数据库中,即使系统发生故障,重新启动后也能够恢复到事务提交后的一致状态。持久性确保事务的结果是可靠的,不会因为系统故障而丢失。

原子性和持久性很好理解,隔离性会放到事务隔离级别里面会更好理解一点,暂不赘述。

单独讲讲一致性

一致性有点抽象,一致性的意思是说,嗯。。。,事务的执行不会破坏数据库的一致性约束。

咳,重点在这两句话的加粗字体:

1、事务的执行不会破坏数据库的一致性约束

2、在事务开始前和结束后,数据库的状态必须满足一定的一致性规则

拿耳熟能详的交易例子来说,假设在交易系统里只有两个人A和B,两个人的余额总额200块,无论两个人如何交易,最后两个人的余额加起来一定是=200。那么,这个“所有余额相加=200”就是一个一致性约束。

这时候*大的举手了:这个看起来是应用层的设定,好像和数据库没有关系?

没错,你可以理解一致性就是:应用系统从一个正确的状态到另一个正确的状态.而ACID就是说事务能够通过AID来保证这个C的过程.C是目的,AID都是手段

用《数据密集型系统分析与设计》中的一句话来说:

"ensuring the consistency is the responsibility of user, not DBMS."(保证一致性是用户的责任,而非数据库)

一个应用的一致性约束是什么,取决于具体的业务(像交易系统的总额不变),这个是由用户决定的,而不是数据库。数据库承担的作用是,它按照用户给定的事务去正常执行、提交或回滚后,不会破坏这个一致性约束。

前提是用户给的代码没有bug。如果在一次交易中,用户分成两个事务提交:买的提交一次,卖的提交一次,一旦在买和卖中间宕机,最后的总额对不上是板上钉钉的事。

因此,保证一致性是用户的责任,而非DBMS。

开胃菜先简短一点,后面还有

  • 事务的隔离级别以及不同隔离级别面临的问题
  • mysql如何实现事务隔离

下一篇:

诚意满满之讲透事务隔离级别-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值