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