解決MySQL遇到錯(cuò)誤:1217 - Cannot delete or update a parent row: a foreign key constraint fails
遇到問(wèn)題
今天在準(zhǔn)備"刪庫(kù)跑路"的時(shí)候
有的數(shù)據(jù)表再刪除的時(shí)候報(bào)了以下錯(cuò)誤:
1217 - Cannot delete or update a parent row: a foreign key constraint fails
本著有事找度娘的原則,將這句話百度翻譯一下,中文意思是“無(wú)法刪除或更新父行:外鍵約束失敗”。
那這不就好辦了,把有外鍵約束的表刪了或者解除約束不就好了。
原因
查看了一下教程發(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ù),至少可以早出來(lái)兩年 (手動(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è)參考,也希望大家多多支持腳本之家。
- mysql 8.0.25之取巧解決修改密碼報(bào)錯(cuò)的問(wèn)題
- 如何解決Mysql報(bào)錯(cuò)Deadlock found when trying to get lock;try restarting transaction問(wèn)題
- 解決java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver報(bào)錯(cuò)問(wèn)題
- mysql報(bào)錯(cuò)ERROR 1396 (HY000): Operation ALTER USER failed for root@localhost解決方式
相關(guān)文章
SQL中row_number()?over(partition?by)的用法說(shuō)明
這篇文章主要介紹了SQL中row_number()?over(partition?by)的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
MySQL字符串截取的核心要點(diǎn)和注意事項(xiàng)
這篇文章主要介紹了MySQL字符串截取的核心要點(diǎn)和注意事項(xiàng),substr函數(shù)在數(shù)據(jù)處理中有著廣泛的應(yīng)用,從日志分析、數(shù)據(jù)報(bào)告生成到復(fù)雜的數(shù)據(jù)清洗和處理流程中,substr都能大顯身手,需要的朋友可以參考下2025-08-08
在同一Linux下安裝兩個(gè)版本的MySQL的流程步驟
打工人奉旨制作數(shù)據(jù)庫(kù)服務(wù)的虛擬機(jī)模板,模板中包含各種數(shù)據(jù)庫(kù),其中mysql需要具備5.7及8.0兩個(gè)版本,并保證服務(wù)能正常同時(shí)使用,所以本文給小編介紹了在同一Linux下安裝兩個(gè)版本的MySQL的流程步驟,需要的朋友可以參考下2024-03-03
PHP學(xué)習(xí)散記 2012_01_07(MySQL)
數(shù)據(jù)庫(kù)是Web大多數(shù)應(yīng)用開(kāi)發(fā)的基礎(chǔ)。如果你是用PHP,那么大多數(shù)據(jù)庫(kù)用的是MYSQL也是LAMP架構(gòu)的重要部分2012-01-01
MySQL中數(shù)據(jù)類(lèi)型相關(guān)的優(yōu)化辦法
這篇文章主要介紹了MySQL中數(shù)據(jù)類(lèi)型相關(guān)的優(yōu)化辦法,包括使用多列索引等相關(guān)的優(yōu)化方法,需要的朋友可以參考下2015-07-07
MySQL索引優(yōu)化指南之如何科學(xué)為數(shù)據(jù)表添加索引
在數(shù)據(jù)庫(kù)優(yōu)化中,索引(Index)是最常用的性能優(yōu)化手段之一,正確的索引可以大幅提升查詢速度,本文小編就來(lái)和大家講講如何為數(shù)據(jù)表科學(xué)添加索引吧2025-05-05
通過(guò)實(shí)例認(rèn)識(shí)MySQL中前綴索引的用法
這篇文章主要通過(guò)實(shí)例來(lái)介紹MySQL中的前綴索引,包括前綴在實(shí)際使用中需要考慮到的長(zhǎng)度問(wèn)題等,需要的朋友可以參考下2015-05-05

