3 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
按原樣,您必須先刪除廣告商表中的行,然后才能刪除它引用的作業(yè)表中的行。這個(gè):
ALTER TABLE `advertisers` ADD CONSTRAINT `advertisers_ibfk_1` FOREIGN KEY (`advertiser_id`) REFERENCES `jobs` (`advertiser_id`);
......實(shí)際上與應(yīng)該是的相反。實(shí)際上,這意味著您必須在廣告商之前在作業(yè)表中創(chuàng)建記錄。所以你需要使用:
ALTER TABLE `jobs` ADD CONSTRAINT `advertisers_ibfk_1` FOREIGN KEY (`advertiser_id`) REFERENCES `advertisers` (`advertiser_id`);
一旦糾正了外鍵關(guān)系,你的刪除語(yǔ)句就可以了。

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
簡(jiǎn)單的方法是禁用外鍵檢查; 進(jìn)行更改然后重新啟用外鍵檢查。
SET FOREIGN_KEY_CHECKS=0; -- to disable them
SET FOREIGN_KEY_CHECKS=1; -- to re-enable them

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
在您當(dāng)前(可能有缺陷的)設(shè)計(jì)下,您必須先刪除廣告商表中的行,然后才能刪除它引用的作業(yè)表中的行。
或者,您可以設(shè)置外鍵,以便父表中的刪除會(huì)導(dǎo)致子表中的行自動(dòng)刪除。這稱為級(jí)聯(lián)刪除。它看起來像這樣:
ALTER TABLE `advertisers`ADD CONSTRAINT `advertisers_ibfk_1`FOREIGN KEY (`advertiser_id`) REFERENCES `jobs` (`advertiser_id`)ON DELETE CASCADE;
話雖如此,正如其他人已經(jīng)指出的那樣,你的外鍵感覺它應(yīng)該反過來,因?yàn)閺V告商表真的包含主鍵而job表包含外鍵。我會(huì)像這樣重寫它:
ALTER TABLE `jobs`ADD FOREIGN KEY (`advertiser_id`) REFERENCES `advertisers` (`advertiser_id`);
并且不需要級(jí)聯(lián)刪除。
添加回答
舉報(bào)