MySQL的SQL語句 - 數據定義語句 - DROP 語句(3)

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,則解析但忽略它們。
相關文章
相關標籤/搜索