1. 程式人生 > >MySQL5.6 CREATE TABLE源碼分析

MySQL5.6 CREATE TABLE源碼分析

MySQL 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非原子性導致的後果。

MySQL5.6 CREATE TABLE源碼分析