DROP TABLE 語句
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CASCADE]
DROP TABLE 語句刪除一個或多個表。必須擁有每一個表的 DROP 權限。
要小心這個句話! 對於每一個表,它將刪除表定義和全部表數據。若是表被分區,則該語句刪除表定義、全部分區、存儲在這些分區中的全部數據以及與被刪除表關聯的全部分區定義。
刪除一個表也會刪除該表的全部觸發器。
DROP TABLE 會致使隱式提交,但與 TEMPORARY 關鍵字一塊兒使用時除外。
重要
刪除表時,不會自動刪除專門爲該表授予的權限。必須手動刪除它們。
若是參數列表中的某些表不存在,則 DROP TABLE 語句的行爲取決於 IF EXISTS 子句是否給定:
● 若是沒有 IF EXISTS,該語句將失敗,並出現錯誤,指示它沒法刪除哪些不存在的表,而且不進行任何更改。
● 若是存在,刪除不存在的表不會發生錯誤。該語句刪除全部存在的指定表,併爲每一個不存在的表生成一個 NOTE 診斷。能夠使用 SHOW WARNINGS 語句查詢這些診斷信息。
在一些很是規狀況下,例如在數據字典中有條目,但沒有存儲引擎管理的表的特殊狀況,用 IF EXISTS 語句也頗有用。(例如,在從存儲引擎中刪除表以後,但在刪除數據字典條目以前,發生了異常的服務器退出。)
TEMPORARY 關鍵字有如下效果:
● 該語句只刪除 TEMPORARY 表。
● 該語句不會致使隱式提交。
● 不會檢查訪問權限。臨時表只對建立它的會話可見,所以不須要檢查。
包含 TEMPORARY 關鍵字是防止意外刪除非臨時表的好方法。
RESTRICT 和 CASCADE 關鍵字什麼也不作。容許它們使得從其餘數據庫系統移植到 MySQL 變得更容易。
全部 innodb_force_recovery 設置都不支持 DROP TABLE。
DROP TABLESPACE 語句
DROP [UNDO] TABLESPACE tablespace_name [ENGINE [=] engine_name]
該語句刪除了以前使用 CREATE TABLESPACE 建立的表空間。NDB 和InnoDB 存儲引擎支持該語句。
UNDO 關鍵字是 MySQL 8.0.14 中引入的,要刪除回滾表空間,必須指定UNDO 關鍵字。只有使用 CREATE UNDO TABLESPACE 語法建立的 undo 表空間能夠被刪除。被刪除以前 undo 表空間必須處於空狀態。
ENGINE 設置使用表空間的存儲引擎,其中 engine_name 是存儲引擎的名稱。目前支持 InnoDB 和 NDB 值。若是沒有設置,則使用default_storage_engine 的值。若是它與用於建立表空間的存儲引擎不一樣,則 DROP TABLESPACE 語句將失敗。
tablespace_name 在 MySQL 中是區分大小寫的標識符。
對於 InnoDB 的通用表空間,必須在執行 DROP TABLESPACE 操做以前將全部表從表空間中刪除。若是表空間不爲空,DROP TABLESPACE 將返回錯誤。
要刪除的 NDB 表空間必須不包含任何數據文件; 換句話說,在刪除一個NDB 表空間以前,必須先使用 ALTER TABLESPACE ... DROP DATAFILE 刪除其中的數據文件。
注意事項
● 當表空間中的最後一個表被刪除時,通用 InnoDB 表空間不會被自動刪除。必須使用 DROP TABLESPACE tablespace_name 語句顯式地刪除表空間。
● DROP DATABASE 操做能夠刪除屬於通用表空間的表,但不能刪除該表空間,即便該操做刪除屬於該表空間的全部表。必須使用 DROP TABLESPACE tablespace_name 語句顯式地刪除表空間。
● 與系統表空間相似,截斷或刪除存儲在通用表空間中的表會在通用表空間 .ibd 數據文件內部釋放空閒空間,該空間只能用於新的 InnoDB 數據,空間不會像獨立表空間那樣釋放回操做系統。
InnoDB的例子
這個例子演示瞭如何刪除 InnoDB 通用表空間。通用表空間 ts1 建立時只有一個表。在刪除表空間以前,必須刪除該表。
mysql> CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' Engine=InnoDB;
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1 Engine=InnoDB;
mysql> DROP TABLE t1;
mysql> DROP TABLESPACE ts1;
這個例子演示瞭如何刪除 undo 表空間。undo 表空間在被刪除以前必須是空的。
mysql> DROP UNDO TABLESPACE undo_003;
NDB 例子
這個示例展現瞭如何刪除 NDB 表空間 myts,該表空間有一個數據文件mydata-1.dat,並假設存在名爲 mylg 的日誌文件組。
mysql> CREATE TABLESPACE myts -> ADD DATAFILE 'mydata-1.dat' -> USE LOGFILE GROUP mylg -> ENGINE=NDB;
在被刪除以前,必須使用 ALTER TABLESPACE 從表空間中刪除全部數據文件,以下所示:
mysql> ALTER TABLESPACE myts -> DROP DATAFILE 'mydata-1.dat' -> ENGINE=NDB;
mysql> DROP TABLESPACE myts;
DROP TRIGGER 語句
DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name
該語句刪除觸發器。模式(數據庫)名稱是可選的。若是省略模式,觸發器將從默認模式中刪除。執行 DROP TRIGGER 須要與觸發器關聯的表的TRIGGER 權限。
使用 IF EXISTS 防止刪除不存在的觸發器發生錯誤。當使用 IF EXISTS時,會爲不存在的觸發器生成一個 NOTE。
若是刪除表,也會刪除表的觸發器。
DROP VIEW 語句
DROP VIEW [IF EXISTS] view_name [, view_name] ... [RESTRICT | CASCADE]
DROP VIEW 語句刪除一個或多個視圖。執行此語句必需要擁有每一個視圖的DROP 權限。
若是參數列表中指定的某些視圖不存在,該語句將失敗,會報錯指出不存在的視圖名稱,此種狀況下不進行任何更改。
注意
在 MySQL 5.7 和更早的版本中,若是參數列表中指定的某些視圖不存在,DROP VIEW 語句會返回錯誤,但也會刪除列表中確實存在的全部視圖。因爲 MySQL 8.0 中行爲的改變,一個在 MySQL 5.7 複製源服務器上部分完成的 DROP VIEW 操做在 MySQL 8.0 副本上覆制時失敗。要避免這種失敗場景,請在 DROP VIEW 語句中使用 IF EXISTS 語法,以防止不存在的視圖引起錯誤。
IF EXISTS 子句防止不存在的視圖引起錯誤。當給定此子句時,將爲每一個不存在的視圖生成 NOTE。
若是給定 RESTRICT 和 CASCADE,則解析但忽略它們。