今天在恢復從庫和主庫不一樣步的數據時,看到關於外鍵的報錯。sql
ERROR 1451 (23000): Connot delete or update a parent row: a foreign key constarint fails 性能
(`Biz`.`TB_CERTIFICATE_RECORD`, CONSTRAINT `FK_TB_CERTIFICATE_RECORD_CERTIFICATE_ID` FOREIGN KEY (`CERTIFICATE_ID`) REFERENCES `TB_CERTIFICATE` (`ID`))spa
應該是父表沒有恢復記錄,先恢復了子表,遇到有外鍵約束在父表找不到記錄,故報錯。同步
這裏個人解決辦法是:先使外鍵約束失效,執行SQL, 再恢復約束。date
set foreign_key_checks=0; //關閉外鍵檢查程序
source xxx.sql數據
set foreign_key_checks=1; //開啓外鍵檢查co
經過Google得知,MySQL不建議使用外鍵,約束應該交給程序去作。let
不須要外鍵的緣由以下:delete
一、會下降性能 二、增長了維護成本 三、分庫分表中外鍵不起做用