5、刪除被其它表關聯的主表
資料表之間經常存在外來鍵關聯的情況,這時如果直接刪除父表,會破壞資料表的完整性,也會刪除失敗。
刪除父表有以下兩種方法:
- 先刪除與它關聯的子表,再刪除父表;但是這樣會同時刪除兩個表中的資料。
- 將關聯表的外來鍵約束取消,再刪除父表;適用於需要保留子表的資料,只刪除父表的情況。
下面介紹瞭如何取消關聯表的外來鍵約束並刪除主表,也就是上面所說的刪除父表的第二種方法。
在資料庫中建立兩個關聯表。建立表 tb_emp4 的 SQL 語句如下:
CREATE TABLE tb_emp4
(
id INT(11) PRIMARY KEY,
name VARCHAR(22),
location VARCHAR (50)
);
接下來建立表 tb_emp5,SQL 語句如下:
CREATE TABLE tb_emp5
(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
CONSTRAINT fk_emp4_emp5 FOREIGN KEY (deptId) REFERENCES tb_emp4(id)
);
tb_emp5 表為子表,具有名稱為 fk_emp4_emp5 的外來鍵約束;tb_emp4 為父表,其主鍵 id 被子表 tb_ emp5 所關聯。
刪除被資料表 tb_emp5 關聯的資料表 tb_emp4,SQL 語句如下:
mysql> DROP TABLE tb_emp4;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
由執行結果可以看出,當主表在存在外來鍵約束時,不能被直接刪除。
下面解除子表 tb_emp5 的外來鍵約束,SQL語句和執行結果如下:
mysql> ALTER TABLE tb_emp5 DROP FOREIGN KEY fk_emp4_emp5;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
語句成功執行後,會取消表 tb_emp4 和表 tb_emp5 之間的關聯關係。
解除關聯關係後,可以使用 DROP TABLE 語句直接刪除父表 tb_emp4,SQL 語句如下:
DROP TABLE tb_emp4;
最後通過 SHOW TABLES 命令檢視資料表列表,如下所示:
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| tb_emp5 |
| temp |
+----------------+
可以發現,資料庫列表中已經不存在名稱為 tb_emp4 的表,刪除成功。
相關文章
- sql 多表關聯刪除表資料SQL
- Oracle快速找回被刪除的表Oracle
- laravel 多對多關聯刪除中間表Laravel
- 簡單介紹mysql如何刪除資料表和關聯的資料表刪除詳情MySql
- oracle級聯刪除使用者,刪除表空間Oracle
- hyperf關聯子表查詢主表資料
- 級聯刪除
- 修改刪除表
- Git恢復被刪除的分支Git
- mysql 關聯更新刪除不走索引優化MySql索引優化
- 線性表的相關操作-初始化、增添、刪除
- 什麼樣的文章會被刪除?
- mySql刪除多個表 刪除多個欄位的SQLMySql
- MySQL socket檔案被刪除MySql
- 如何恢復被刪除的 GitLab 專案?Gitlab
- 表的關聯關係
- MySQL刪除資料表MySql
- Tablespace表空間刪除
- 刪除內聯元素之間的空隙
- 關於刪除itunes connect的appAPP
- word內容被刪除怎麼辦?word內容被刪除了的恢復方法
- Mac上的照片被誤刪除怎麼辦?Mac
- JZ18刪除表的節點
- MySQL如何優雅的刪除大表MySql
- PyQt5刪除QListWidget中的itemQT
- Ant Design 原始碼倉庫被刪除原始碼
- python 刪除大表資料Python
- [MYSQL][1]建立,修改,刪除表MySql
- linux 下vim中關於刪除某段,某行,或全部刪除的命令Linux
- mysql 建立和刪除聯合索引MySql索引
- 被360防毒刪除的檔案怎麼恢復防毒
- 恢復EXT3下被刪除的檔案
- 隨身碟被刪除的檔案如何恢復?
- mysql 刪除表中重複的資料MySql
- MYSQL下如何安全的快速刪除大表MySql
- 刪除a表中和b表相同的資料
- [BUG反饋]刪除模型屬性時 不會刪除模型表的field_sort模型
- 刪除臨時表空間組