MySQL(一):基本原理
Innodb 是如何实现事务的
Innodb 通过 Buffer Pool,LogBuffer,Redo Log,Undo Log 来实现事务,以一个 update 语句为例:
- Innodb 在收到一个update语句后,会先根据条件找到数据所在的页,并将该页缓存在 Buffer Pool 中
- 执行 update 语句,修改 Buffer Pool 中的数据,也就是内存中的数据
- 针对 update 语句生成一个 RedoLog 对象,并存入 LogBuffer 中
- 针对 update 语句生成 undolog 日志,用于事务回滚
- 如果事务提交,那么则把 Redolog 对象进行持久化,后续还有其他机制将 Buffer Pool 中所修改的数据页持久化到磁盘中
- 如果事务回滚,则利用 undolog 日志进行回滚
零时刻导致 Flyway 执行失败
运行时,历史脚本中的 Flyway 失败,因为带有时间戳的脚本没有默认值。检查本地 MySQL 环境的 sql_mode,删除NO_ZERO_DATE
和NO_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";
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?