2020-06-27:ACID是什么?描述一下?

举报
福大大架构师每日一题 发表于 2020/08/19 10:50:57 2020/08/19
【摘要】 福哥答案2020-06-27:福哥口诀法:事原一隔持(事务属性ACID:原子性、一致性、隔离性、持久性)用银行数据库来举例子解释一下这四个特性原子性: 一个事务可能会包含多种操作,比如转账操作包括从你的账户上扣钱和对方账户加钱。虽然内部有多步操作,但是外部看来它们是一个整体,要么都成功执行,要么都不要执行。否则事务进行到一半出现问题,就可能会出现你的账户扣了钱,但是对方账户没有收到钱的问题一...

福哥答案2020-06-27:

福哥口诀法:事原一隔持(事务属性ACID:原子性、一致性、隔离性、持久性)

用银行数据库来举例子解释一下这四个特性

原子性: 一个事务可能会包含多种操作,比如转账操作包括从你的账户上扣钱和对方账户加钱。虽然内部有多步操作,但是外部看来它们是一个整体,要么都成功执行,要么都不要执行。否则事务进行到一半出现问题,就可能会出现你的账户扣了钱,但是对方账户没有收到钱的问题

一致性:事务必须使整个系统状态保持一致,比如你和对方来回转账,不管转了多少次,你们两个账户总金额总是一样的,不会出现你转出1000,对方只收到500的情况

隔离性:多个事务同时执行时,必须等前一个事务执行完,才能执行后一个事务,否则会造成数据紊乱。比如你账户有1000元,你给A转账500元。事务进行到一半,也就是把500元从你的账户扣除,但是此时该事务还没有提交,B又向你转账1000元。此时第二个事务查询你的账户仍是1000元,并以这个数据进行后续操作。结果就是第一个事务执行完,你的账户变为500元,然后第二个事务执行完,你的账户变为2000元。银行亏大了。所以正确的做法是第二个事务等待第一个事务执行完,再读取你的账户数据就是正确的500元了。当然数据库中不可能所有事务都是这么串联的,否则效率太低,会通过不同级别的锁来控制事务的隔离性。

持久性:事务运行的结果对系统状态的影响必然是持久的,否则服务器一重启,数据全恢复前一天的记录,银行就甭干了


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。