Bota5ky

MySQL(一):基本原理

Innodb 是如何实现事务的

Innodb 通过 Buffer Pool,LogBuffer,Redo Log,Undo Log 来实现事务,以一个 update 语句为例:

  1. Innodb 在收到一个update语句后,会先根据条件找到数据所在的页,并将该页缓存在 Buffer Pool 中
  2. 执行 update 语句,修改 Buffer Pool 中的数据,也就是内存中的数据
  3. 针对 update 语句生成一个 RedoLog 对象,并存入 LogBuffer 中
  4. 针对 update 语句生成 undolog 日志,用于事务回滚
  5. 如果事务提交,那么则把 Redolog 对象进行持久化,后续还有其他机制将 Buffer Pool 中所修改的数据页持久化到磁盘中
  6. 如果事务回滚,则利用 undolog 日志进行回滚

零时刻导致 Flyway 执行失败

运行时,历史脚本中的 Flyway 失败,因为带有时间戳的脚本没有默认值。检查本地 MySQL 环境的 sql_mode,删除NO_ZERO_DATENO_ZERO_IN_DATE

SELECT @@GLOBAL.sql_mode;
--- SET时移除NO_ZERO_DATE和NO_ZERO_IN_DATE
SET GLOBAL sql_mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
posted @ 2023-06-02 22:50  Bota5ky  阅读(5)  评论(0编辑  收藏  举报