mysql如何保证原子性,一致性,持久性
1.mysql原子性的保证是利用了undo log。undo log名为回滚日志,是实现原子性的关键,当事务回滚时能够撤销所有已经成功执行的sql语句,他需要记录你要回滚的相应日志信息。undo log记录了这些回滚需要的信息,当事务执行失败或调用了rollback,导致事务需要回滚,便可以利用undo log中的信息将数据回滚到修改之前的样子。
2.mysql原子性的保证是利用了redo log。redo log包括两部分:一是内存中的日志缓冲(redo log buffer),该部分日志是易失性的;二是磁盘上的重做日志文件(redo log file),该部分日志是持久的。innodb通过force log at commit机制实现事务的持久性,即在事务提交的时候,必须先将该事务的所有事务日志写入到磁盘上的redo log file和undo log file中进行持久化。
3.mysql一致性的保证是从2个方面来保证的。从数据库层面来看,A(原子性)、I(隔离性)、D(持久性)是手段,是为了保证一致性,数据库提供的手段。数据库必须要实现AID三大特性,才有可能实现一致性。
但是,如果你在事务里故意写出违反约束的代码,一致性还是无法保证的。例如,你在转账的例子中,你的代码里故意不给B账户加钱,那一致性还是无法保证。因此,还必须从应用层角度考虑。从应用层面,通过代码判断数据库数据是否有效,然后决定回滚还是提交数据!
mysql保证一致性、原子性和持久性的参考https://blog.csdn.net/xmt1139057136/article/details/104912243。
redo log和undo log参考https://juejin.im/entry/6844903681091977229。
- 数据库零碎要点001_数据库的4大特性(原子性_持久性_隔离性_一致性)_数据库的隔离级别(脏读_幻读_不可重复读)_mysql如何设置隔离级别
- 跟面试官侃半小时MySQL事务,说完原子性、一致性、持久性的实现
- mysql如何保证redolog和binlog的一致性,安全性,效率。
- mysql如何保证redolog和binlog的一致性,安全性,效率。
- 面试题:Mysql如何保证一致性?
- 关于MySQL如何使用MVCC(多版本控制)来保证在并发的情况下数据的一致性
- 如何保证db与缓存的数据一致性
- 数据库中原子性,隔离性,一致性如何实现?
- oracle如何保证读一致性 第一弹
- 理解事务——原子性、一致性、隔离性和持久性
- Kafka 是如何保证数据可靠性和一致性
- 分布式事务了解吗?如何解决分布式事务问题的?TCC 如果出现网络连不通怎么办?XA 的一致性如何保证?
- 事务——原子性、一致性、隔离性和持久性的理解
- java中的本地缓存【自己构造单例、guava、ehcache:问题:为什么构造缓存、如何构造缓存、如何保证集群内部缓存的一致性】*****很重要
- MySQL InnoDB如何保证事务特性
- 数据库事务(ACID特征(原子性、一致性、隔离性、持久性)、丢失数据修改,脏数据,不可重复读,幻读,死锁,活锁)讲解
- MySQL二阶段提交以及xtrabackup如何保证备份不丢失数据
- 理解事务——原子性、一致性、隔离性和持久性
- 究竟如何保证session一致性?
- MySql 保证事务的原子性和持久性