MySQL 8.0開始支持原子數據定義語言(DDL)語句。此功能稱為原子DDL。原子DDL語句將與DDL操作關聯的數據字典更新,存儲引擎操作和二進制日志寫入組合到單個原子事務中。即使服務器在操作期間暫停,也會提交事務,并將適用的更改保留到數據字典,存儲引擎和二進制日志,或者回滾事務。
通過在MySQL 8.0中引入MySQL數據字典,可以實現Atomic DDL。在早期的MySQL版本中,元數據存儲在元數據文件,非事務性表和存儲引擎特定的字典中,這需要中間提交。MySQL數據字典提供的集中式事務元數據存儲消除了這一障礙,使得將DDL語句操作重組為原子事務成為可能。
官方文檔:
https://dev.mysql.com/doc/refman/8.0/en/atomic-ddl.html
1、支持的DDL語句
原子DDL功能支持表和非表DDL語句。與表相關的DDL操作需要存儲引擎支持,而非表DDL操作則不需要。目前,只有InnoDB存儲引擎支持原子DDL。
①:受支持的表DDL語句包括 CREATE,ALTER和 DROP對數據庫,表,表和索引,以及語句 TRUNCATE TABLE聲明。
②:支持的非表DDL語句包括:
CREATE和DROP 語句,以及(如果適用)ALTER 存儲程序,觸發器,視圖和用戶定義函數(UDF)的語句。
賬戶管理語句: CREATE,ALTER, DROP,,如果適用, RENAME報表用戶和角色,以及GRANT 和REVOKE報表。
1.1、原子DDL功能不支持以下語句:
①:涉及除存儲引擎之外的存儲引擎的與表相關的DDL語句InnoDB。
②:INSTALL PLUGIN和 UNINSTALL PLUGIN 陳述。
③:INSTALL COMPONENT和 UNINSTALL COMPONENT 陳述。
④:CREATE SERVER, ALTER SERVER和 DROP SERVER語句。
2、原子DDL特性:
①:元數據更新,二進制日志寫入和存儲引擎操作(如果適用)將合并為單個事務。
②:在DDL操作期間,SQL層沒有中間提交。
③:在適用的情況下:
數據字典,程序,事件和UDF高速緩存的狀態與DDL操作的狀態一致,這意味著更新高速緩存以反映DDL操作是成功完成還是回滾。
DDL操作中涉及的存儲引擎方法不執行中間提交,并且存儲引擎將自身注冊為DDL事務的一部分。
存儲引擎支持DDL操作的重做和回滾,這在DDL操作的 Post-DDL階段執行。
④:DDL操作的可見行為是原子的,這會更改某些DDL語句的行為
注意:
原子或其他DDL語句隱式結束當前會話中處于活動狀態的任何事務,就好像您COMMIT在執行語句之前完成了一樣。這意味著DDL語句不能在另一個事務中,在事務控制語句中執行 START TRANSACTION ... COMMIT,或者與同一事務中的其他語句結合使用。
3、DDL語句行為的變化
3.1、DROP TABLE:
新聞熱點
疑難解答