?xml version="1.0" encoding="UTF-8"?
在MySQL中刪除一張表或一條數(shù)據(jù)的時(shí)候荷愕,出現(xiàn)
[Err] 1451 -Cannot delete?or update a parent row: a foreign key constraint fails (...)
這是因?yàn)镸ySQL中設(shè)置了foreign key關(guān)聯(lián)硅卢,造成無(wú)法更新或刪除數(shù)據(jù)威恼〈瓿梗可以通過(guò)設(shè)置FOREIGN_KEY_CHECKS變量來(lái)避免這種情況扛稽。
我們可以使用
??? SET FOREIGN_KEY_CHECKS=0;
來(lái)禁用外鍵約束.
之后再用
??? SET FOREIGN_KEY_CHECKS=1;
來(lái)啟動(dòng)外鍵約束.
查看當(dāng)前FOREIGN_KEY_CHECKS的值可用如下命令
??? SELECT??@@FOREIGN_KEY_CHECKS;
問(wèn)題出現(xiàn)的原因:?
MySQL 5.7.5及以上功能依賴檢測(cè)功能泽篮。如果啟用了ONLY_FULL_GROUP_BY SQL模式(默認(rèn)情況下)贾节,MySQL將拒絕選擇列表,HAVING條件或ORDER BY列表的查詢引用在GROUP BY子句中既未命名的非集合列撮抓,也不在功能上依賴于它們妇斤。(5.7.5之前,MySQL沒(méi)有檢測(cè)到功能依賴關(guān)系丹拯,默認(rèn)情況下不啟用ONLY_FULL_GROUP_BY站超。有關(guān)5.7.5之前的行為的說(shuō)明,請(qǐng)參見(jiàn)“MySQL 5.6參考手冊(cè)”乖酬。)
用sql查詢
select @@global.sql_mode
查詢出來(lái)的值為:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
去掉ONLY_FULL_GROUP_BY死相,重新設(shè)置值
set@@global.sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"