MySQL-8.0.x DDL 原子性

一、mysql-8.0.x 新特性之 DDL 原子性mysql

在沒有 DDL 原子性以前 DBA 對 DDL 語句基本上是無能爲力的,好比說 DDL 執行的過程當中停電了,這下就只有天知道了。實現上最終的願景仍是但願獲得一個肯定的結果,要麼成功了,要麼失敗了。mysql-8.0.x 帶來了 DDL 原子性sql

 

二、mysql-5.6.x DDL 操做的表現spa

mysql-5.6.x 並不保證原子性,因此當咱們一次 drop 多個表的時候就有可能遇到部分紅功的狀況code

mysql> select @@version;
+-----------+
| @@version |
+-----------+
| 5.6.44    |
+-----------+
1 row in set (0.00 sec) -- mysql-5.6.44

mysql> show tables;
+------------------+
| Tables_in_tempdb |
+------------------+
| t                |
+------------------+
1 row in set (0.00 sec) -- 庫中只有一個表 t

mysql> drop table t,t_not_exists;  
ERROR 1051 (42S02): Unknown table 'tempdb.t_not_exists' -- 嘗試一次刪除多張表 t & t_not_exists

mysql> show tables; 
Empty set (0.00 sec) -- 雖然 t_not_exists 表並不存在,可是 t 仍是被刪除了
        

 

三、mysql-8.0.x DDL 操做原子性blog

mysql-8.0.x 提供了原子性支持,保證了 DDL 操做要麼所有成功、要麼所有失敗。文檔

mysql> select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.16    |
+-----------+
1 row in set (0.00 sec)

mysql> show tables;
+------------------+
| Tables_in_tempdb |
+------------------+
| t                |
+------------------+
1 row in set (0.00 sec)

mysql> drop table t ,t_not_exists;
ERROR 1051 (42S02): Unknown table 'tempdb.t_not_exists'
mysql> show tables;
+------------------+
| Tables_in_tempdb |
+------------------+
| t                |
+------------------+
1 row in set (0.00 sec) -- 由於對 t_not_exists 的操做失敗了,因此整個 DDL 都回滾了;這也就解釋了爲何 t 表還在。

 

四、mysql-5.7.x 也表現出了 DDL 原子性的支持get

之因此說 5.7 是看起來像是支持 DDL 原子性,是由於在官方文檔上並無提到它支持,可是它表現了一些與 8.0 相似的行爲能力。io

mysql> select @@version;
+------------+
| @@version  |
+------------+
| 5.7.26-log |
+------------+
1 row in set (0.00 sec)

mysql> show tables;
+------------------+
| Tables_in_tempdb |
+------------------+
| t                |
+------------------+
1 row in set (0.00 sec)

mysql> drop table t ,t_not_exists;
ERROR 1051 (42S02): Unknown table 'tempdb.t,tempdb.t_not_exists' 
-- 二者在錯誤信息上仍是有必定的差異 
-- 8.0 會報 t_not_exists 表不存在
-- 5.7 會報 t 和 t_not_exists 都不存在

mysql> show tables;
+------------------+
| Tables_in_tempdb |
+------------------+
| t                |
+------------------+
1 row in set (0.00 sec)
            

 

引用自:https://www.sqlpy.com/blogs/books/1/chapters/12/articles/52table

 

---class

相關文章
相關標籤/搜索