MySQL5.6 CREATE TABLE源码分析

MySQL5.6 CREATE TABLE源码分析


MySQL5.6之前的版本DDL是非原子的。也就是说对于复合的DDL,比如DROP TABLE t1, t2;执行过程中如果遇到server crash,有可能出现表t1被DROP掉了,但是t2没有被DROP掉的情况。即便是一条DDL,比如CREATE TABLE t1(a int);也可能在server crash的情况下导致建表不完整,有可能在建表失败的情况下遗留.frm或者.ibd文件

从原理流程图中可以看出,create table先创建.frm文件,再调用ha_create_table创建ibd文件,如果创建成功则退出,否则将之前创建的frm文件删除。但是这里就有问题了,如果创建完frm文件后,server挂了,那么frm文件是创建成功了,但是ibd文件没有创建。这就是DDL非原子性导致的后果。

相关文章

优化MySQL数据库发布系统存储的方法有:1.mysql库主从读写分...
使用mysql的方法:在“我的电脑”→右键→“管理”→“服务”...
在mysql中查看root用户权限的方法:1.命令行启动mysql服务;...
MySQL主从复制是用来备份一个与主数据库一样环境的从数据库,...
运行mysql的方法1.启动mysql服务,在“我的电脑”→右键→“...
开启mysql的方法1.可以通过快捷键win+r,输入cmd,打开窗口,...