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。