数据库事务 ACID

事务:一个操作,一个要执行SQL语句,要么执行,要么不执行,是一个不可分割的工作单位。
有如下特性:
A:原子性(atomicity)
C:一致性(consistency)
I:隔离性(isolation)
D:持久性(durability)

先理解数据库的一致性
参考这篇博客
https://www.cnblogs.com/ivanpan/p/6653990.html
考虑如下场景:
公司给员工发工资
1、财务处确认给你发的工资是多少
2、确认公司账户有多少资金
3、像银行发起转账申请,银行扣除学校财务卡上的指定金额
4、银行向员工工资卡中打入指定金额
5、银行汇报双方交易完成

如果执行第3步的时候,突然大断电,整个电力系统进入瘫痪。待电力系统恢复之后,银行并不会执行4,5,甚至连1,2,3的操作记录都对视。此时出现如下问题
1、学校认为,工资已经发出
2、A老师认为,学校还没有发工资
3、银行认为,从来就没有发生过转账的事情
其实整个过程可以用一个词来描述:数据库中的数据产生了“不一致性”,即在转钱的前后要保证钱的总量要一致。

还有要保证数据库的内部数据结构(如 B 树索引或双向链表)都必须是正确的

原子性:因为要满足要么执行,要么不执行,所以事务要么执行,要么不执行,是不可再分割的工作单元。

隔离性:多个事务并发访问时,事务之间是隔离的。
具体的有几种事务隔离级别,请看数据库复习之事务隔离级别

有的隔离并发事务所做的修改要和其他并发事务隔离。这是最基本的,如果这都不能保证,银行存钱就不准了。
一个事务修改数据,另一个事务查看数据时只能查看到修改前的数据或者修改后的数据,不能看到中间状态的数据。不然就会读到脏数据。
完全的隔离就要求串行化,这样会严重影响性能。

持久性:事务一旦提交,对数据库中数据的改变是永久性的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值