文中有一些(自定义 语境 简短 与 便记 )
ACID 是什么?:数据库事务正确执行的 4个原则
A 原子性 C 一致性 I 独立性 D 持久性
这里 我 通过 撰文 与 自解意 的解说
专科描述
(1)原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没发生过一样。
自理解:===== 原子 状态 解意-----1: 被视为不可分割 2: 回到原本
列举:(我的 简约 描述 )
1 :A 与B 的 账中 分别 有 1000 元,
2:他们要进行转账的交易
3: 万一 作故 ----------是 不做提交 的 -===== 即为 回滚
专科描述
(2)一致性:事务开始之前和事务结束后,数据库的完整性约束没有被破坏。
列举:
不论汇款成败,A账 B账 的 总额是2000元。
(3)独立性:事务的执行互不干扰。 延展为 具有安全
(4)持久性:事务执行成功后,该事务对数据库的更改是持久保存在数据库中的,不会被回滚。
---------可以使用日志记录或影子副本来实现。
简短 便记的 : 原 一 独 持 ,对应 英式 :ACID
自解意 的解说 =====:4个维度 解说 指向 事务的特质 是严谨的,
事务这个行为 相应具有现实的物理(正在试着描述 这些)
影响有以下几种可能:
脏读: (就是数据库 的) 一个线程读到 另外一个 线程提交到线程
不可重复读: 一个线程 读到 了 另外一个线程已经 insert 的数据
------- 这2个区别 与解决:
脏读:与 不可重复读 :
解决 : 同一个事务里的 问题 , 通过 第二 隔离机制 来操作 待读完了 下一个接着读
幻读 /虚读: 一个线程读到了 ,另一个线程里已经update 的数据
附:
串行化: 完全把表给锁了 (效率非常低 ,绝对安全)
2/8 原则:对比了 查与读 的 使用率 读查 的为8 ,其他操作 为 2