官术网_书友最值得收藏!

2.6 刪除數據表

刪除數據表就是將數據庫中已經存在的表從數據庫中刪除。注意,在刪除表的同時,表的定義和表中所有的數據均會被刪除。因此,在進行刪除操作前,最好對表中的數據進行備份,以免造成無法挽回的后果。本節將詳細講解數據庫表的刪除方法。

2.6.1 刪除沒有被關聯的表

在MySQL中,使用DROP TABLE可以一次刪除一個或多個沒有被其他表關聯的數據表。語法格式如下:

     DROP TABLE [IF EXISTS]表1, 表2, …, 表n;

其中,“表n”指要刪除的表的名稱,后面可以同時刪除多個表,只需將要刪除的表名依次寫在后面,相互之間用逗號隔開即可。若要刪除的數據表不存在,則MySQL會提示一條錯誤信息:“ERROR 1051 (42S02): Unknown table '表名'”。參數IF EXISTS用于在刪除前判斷要刪除的表是否存在,加上該參數后,再刪除表的時候,如果表不存在,SQL語句就可以順利執行,但是會發出警告(Warning)。

在前面的例子中,已經創建了名為tb_dept2的數據表。如果沒有,那么讀者可輸入語句,創建該表,SQL語句如例2.8所示。下面使用刪除語句將該表刪除。

【例2.29】刪除數據表tb_dept2,SQL語句如下:

     DROP TABLE IF EXISTS tb_dept2;

語句執行完畢之后,使用SHOW TABLES命令查看當前數據庫中所有的表,SQL語句如下:

執行結果可以看到,數據表列表中已經不存在名稱為tb_dept2的表,刪除操作成功。

2.6.2 刪除被其他表關聯的主表

數據表之間存在外鍵關聯的情況下,如果直接刪除父表,結果就會顯示失敗。原因是直接刪除將破壞表的參照完整性。如果必須要刪除,那么可以先刪除與它關聯的子表,再刪除父表,只是這樣會同時刪除兩個表中的數據。但有的情況下可能要保留子表,這時若要單獨刪除父表,則只需將關聯的表的外鍵約束條件取消,然后就可以刪除父表。下面講解這種方法。

在數據庫中創建兩個關聯表。首先,創建表tb_dept2,SQL語句如下:

接下來,創建表tb_emp,SQL語句如下:

使用SHOW CREATE TABLE命令查看表tb_emp的外鍵約束,結果如下:

可以看到,以上執行結果創建了兩個關聯表tb_dept2和表tb_emp,其中tb_emp表為子表,具有名稱為fk_emp_dept的外鍵約束,tb_dept2為父表,其主鍵id被子表tb_emp所關聯。

【例2.30】刪除被數據表tb_emp關聯的數據表tb_dept2。

首先直接刪除父表tb_dept2,輸入刪除語句如下:

可以看到,如前所述,在存在外鍵約束時,主表不能被直接刪除。

接下來,解除關聯子表tb_emp的外鍵約束,SQL語句如下:

     ALTER TABLE tb_emp DROP FOREIGN KEY fk_emp_dept;

語句成功執行后,將取消表tb_emp和表tb_dept2之間的關聯關系。此時,可以輸入刪除語句,將原來的父表tb_dept2刪除,SQL語句如下:

     DROP TABLE tb_dept2;

最后通過SHOW TABLES;查看數據表列表,如下所示:

可以看到,數據表列表中已經不存在名稱為tb_dept2的表。

主站蜘蛛池模板: 大连市| 诸暨市| 翁牛特旗| 海兴县| 抚顺县| 吴桥县| 萝北县| 白山市| 贵南县| 剑河县| 随州市| 黑河市| 东海县| 阜康市| 安西县| 江门市| 和龙市| 饶河县| 新竹市| 南丹县| 寻乌县| 鸡东县| 贵阳市| 玉树县| 南昌县| 宁城县| 石棉县| 漾濞| 华安县| 巫溪县| 双柏县| 北宁市| 芦溪县| 新干县| 东明县| 剑河县| 田林县| 封开县| 华坪县| 常熟市| 平度市|