码迷,mamicode.com
首页 > 其他好文 > 详细

事务的ACID是指什么?

时间:2021-01-22 12:06:00      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:同步   可重复   enter   通过   持久性   The   aci   text   基础   

事务的ACID是指什么?

  • 原子性(Atomic):事务中各项操作,要么全做要么全不做,任何一项操作的失败都会导致整个事务的失败;
  • 一致性(Consistent):事务结束后系统状态是一致的;
  • 隔离性(lsolated):并发执行的事务彼此无法看到对方的中间状态;
  • 持久性(Durable):事务完成后所做的改动都会被持久化,即使发生灾难性的失败。通过日志和同步备份可以在故障发生后重建数据;
    关于事务,在面试中被问到的概率是很高的,可以问的问题也是很多的。首先需要知道的是,只有存在并发数据访问时才需要事务。当多个事务访问同一数据时,可能会存在5类问题,包括3类数据读取问题(脏读、不可重复读和幻读)和⒉类数据更新问题(第1类丢失更新和第⒉类丢失更新)。

脏读(Dirty Read) :A事务读取B事务尚未提交的数据并在此基础上操作,而B事务执行回滚,那么A读取到的数据就是脏数据。

这种情况常发生于转账与取款操作中。

时间顺序 转账事务 取款事务
1 开始事务
2 开始事务
3 查询账户余额为2000元
4 取款1000元,余额被更改为1000元
5 查询账户余额为1000元(产生脏读)
6 取款操作发生未知错误,事务回滚,余额变更为2000元
7 转入2000元,余额被更改为3000元(脏读的1000+2000)
8 提交事务
备注 按照正确逻辑,此时账户余额应该为4000元

不可重复读(Unrepeatable Read) :事务A重新读取前面读取过的数据,发现该数据已经被另一个已提交的事务B修改过了。

例子:
在事务1中,Jack读取了自己的工资为1000,但是此时事务1的操作还并没有完成 ,后面还有1次相同的读取操作。
在事务2中,这时财务人员修改了Jacck的工资为2000,并提交了事务。
在事务1中,Jack再次读取自己的工资时,工资变为了2000。
在一个事务中前后两次读取的结果并不致,导致了不可重复读。

事务的ACID是指什么?

标签:同步   可重复   enter   通过   持久性   The   aci   text   基础   

原文地址:https://www.cnblogs.com/jone-chen/p/14309387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!