数据库事务的4个特性(ACID) 作者:马育民 • 2019-08-18 20:15 • 阅读:10216 需要掌握:[数据库事务-银行转账问题](https://www.malaoshi.top/show_1IX2idpROSDP.html "数据库事务-银行转账问题") # 说明 事务的4个特性,或满足4个条件,简称:ACID ### 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都执行成功,有一个失败,数据就恢复到初始值 **一句话理解:**一个业务操作,或者 点一下按钮执行的操作,这一个操作 可能包含 **多次 增、删、改** 数据库 如:银行转账、电商下订单 ### 一致性(Consistency) 事务前后 **数据** 的完整性必须保持一致。 如:银行转账,预期的结果是:马云账户减少1亿,李雷的账户增加1亿。由于程序发生错误,马云账户成功减少1亿,但李雷的账户没有增加1亿,这就是 **数据不一致** ### 隔离性(Isolation) 当 **多个用户** **同时 增、删、改、查 数据库** 时,数据库为每一个用户 **开启的事务**,**不能被 其他事务** **干扰** ,多个并发事务之间要相互 **隔离**。 [数据库的4种事务隔离级别](https://www.malaoshi.top/show_1IX9gjHRSOh.html "数据库的4种事务隔离级别") [脏读、不可重复读、幻读](https://www.malaoshi.top/show_1IX9gVCVzZP.html "脏读、不可重复读、幻读") ##### 例子 在马云给我转账 **1亿** 的同时,马化腾给我转账 **2亿**,那么最终我得账户应该是3 亿,而不会发生互相覆盖的情况 [![](https://www.malaoshi.top/upload/0/0/1EF3uSNi5EtM.png)](https://www.malaoshi.top/upload/0/0/1EF3uSNi5EtM.png) >在plsql操作oracle数据时,执行```for update```后,就开启了事务,在提交、回滚前,其他 `for update` 语句都处于等待状态 ### 持久性(Durability) 事务提交后,**永久保存到数据库中**,即使系统发生故障也不会丢失 感谢: https://blog.csdn.net/dengjili/article/details/82468576 https://blog.csdn.net/chosen0ne/article/details/10036775 原文出处:http://malaoshi.top/show_1EF3uCskLf9s.html