解決MySQL遇到錯誤:1217 - Cannot delete or update a parent row: a foreign key constraint fails
遇到問題
今天在準備"刪庫跑路"的時候
有的數(shù)據(jù)表再刪除的時候報了以下錯誤:
1217 - Cannot delete or update a parent row: a foreign key constraint fails
本著有事找度娘的原則,將這句話百度翻譯一下,中文意思是“無法刪除或更新父行:外鍵約束失敗”。
那這不就好辦了,把有外鍵約束的表刪了或者解除約束不就好了。
原因
查看了一下教程發(fā)現(xiàn)
數(shù)據(jù)表之間經(jīng)常存在外鍵關聯(lián)的情況,這時如果直接刪除父表,會破壞數(shù)據(jù)表的完整性,也會刪除失敗。
刪除父表有以下兩種方法
- 先刪除與它關聯(lián)的子表,再刪除父表;但是這樣會同時刪除兩個表中的數(shù)據(jù)。
- 將關聯(lián)表的外鍵約束取消,再刪除父表;適用于需要保留子表的數(shù)據(jù),只刪除父表的情況。
解決方法
我們嘗試一下第二種方法,這樣還可以保留一下子表的數(shù)據(jù),至少可以早出來兩年 (手動狗頭)
1.要刪除的父表
CREATE TABLE tb_drop ( id INT(11) PRIMARY KEY, name VARCHAR(22), location VARCHAR (50) );
2.外鍵關聯(lián)需要被刪除的子表
CREATE TABLE tb_foreign ( id INT(11) PRIMARY KEY, name VARCHAR(25), deptId INT(11), salary FLOAT, CONSTRAINT fk_drop_foreign FOREIGN KEY (deptId) REFERENCES tb_drop(id) );
3.此時如果刪除tb_drop表
就會報出1217錯誤,所以要解除外鍵約束
ALTER TABLE tb_foreign DROP FOREIGN KEY fk_drop_foreign;
執(zhí)行成功后,兩個表之間的外鍵約束就解除了,此時刪除表就可以了
dDROP TABLE tb_drop;
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
MySQL請求處理全流程之如何從SQL語句到數(shù)據(jù)返回
這篇文章主要介紹了MySQL請求處理全流程之如何從SQL語句到數(shù)據(jù)返回,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2025-03-03CentOS6.5下RPM方式安裝mysql5.6.33的詳細教程
本文給大家詳細介紹CentOS6.5下RPM方式安裝mysql5.6.33的教程,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友一起看看吧2016-10-10mysql5.6及以下版本如何查詢數(shù)據(jù)庫里的json
MySQL里面保存數(shù)據(jù)有時候會把一些雜亂且不常用的時候丟進一個json字段里面,那么如何查詢數(shù)據(jù)庫里的json呢以及mysql存儲json注意那些格式呢?接下來通過本文給大家詳細介紹,需要的朋友參考下2017-03-03