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非原子性導致的後果。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31493717/viewspace-2154424/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- create table,show tables,describe table,DROP TABLE,ALTER TABLE ,怎麼使用?
- MySQL的create table as 與 like區別MySql
- use azure data studio to create external table for oracleOracle
- oracle 19c 無法create table解決Oracle
- mysql5.6在匯入時報innodb_table_stats不存在MySql
- ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECTError
- create table 使用select查詢語句建立表的方法分享
- ORA-31633: unable to create master table "SYSTEM.SYS_EXPORT_FULL_XX"ASTExport
- 【SQL】14 UNION 操作符、SELECT INTO 語句、INSERT INTO SELECT 語句、CREATE DATABASE 語句、CREATE TABLE 語句SQLDatabase
- 深入解析 oracle drop table內部原理Oracle
- mybatis進行資料庫建表 CREATE command denied to user 'root'@'127.0.0.1' for table 問題MyBatis資料庫127.0.0.1
- Linux安裝Mysql5.6LinuxMySql
- Mysql5.6 自動化部署MySql
- create_singlethread_workqueue, create_workqueuethread
- SparseArray原理分析
- SparseIntArray原理分析
- Promise原理分析Promise
- Handler原理分析
- mysqldump原理分析MySql
- HSF原理分析
- ThreadLocal原理分析thread
- ReentrantLock原理分析ReentrantLock
- Xposed原理分析
- AST 原理分析AST
- SpringIOC原理分析Spring
- KVO原理分析
- ThreadLocal 原理分析thread
- mysql5.6 mysqldump備份報錯MySql
- MySQL5.6 PERFORMANCE_SCHEMA 說明MySqlORM
- Linux上yum安裝mysql5.6LinuxMySql
- Https 加密原理分析HTTP加密
- isMemberOfClass、isKindOfClass原理分析
- redis client原理分析Redisclient
- queue:work 原理分析
- shiro remembeMe 原理分析REM
- Android JNI原理分析Android
- JavaScript ==原理與分析JavaScript
- ThreadLocalRandom類原理分析threadrandom