如何在外鍵僅引用複合主鍵的一部分時從父表中刪除?mysql外鍵僅引用複合主鍵的一部分
我使用的MySQL 5.6.2
我有具有主鍵項目(A,B)和料品供應商具有主鍵itemsup一個項目表(A,X,Y)。我有給喜歡(A)項基準= itemsup(A)
當我從項目中刪除(父)表我得到錯誤:1451 - 不能刪除或更新父行,外鍵約束失敗
我的表格結構如下。
CREATE TABLE IF NOT EXISTS ITEM (/* parent */
ITEMID INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ITEM ID',
MCA ENUM('A','C','M','X') NOT NULL ,
ITEMNAME VARCHAR(100) NOT NULL COMMENT 'NAME OF ITEM',
PRIMARY KEY (ITEMID, MCA)
)
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS ITEMSUP (/* child */
ITEMID INT UNSIGNED NOT NULL,
SUPID INT UNSIGNED NOT NULL,
MCA ENUM('A','C','M','X') NOT NULL ,
PRIMARY KEY (ITEMID, SUPID, MCA),
CONSTRAINT FK_ITEMSUP_ITEM1
FOREIGN KEY (ITEMID)
REFERENCES ITEM (ITEMID)
ON DELETE NO ACTION
ON UPDATE CASCADE
)
ENGINE = InnoDB;
INSERT INTO ITEM (ITEMID, MCA, ITEMNAME) VALUES (1,'A', 'ONE A');
INSERT INTO ITEM (ITEMID, MCA, ITEMNAME) VALUES (1,'M', 'ONE M');
INSERT INTO ITEMSUP(ITEMID, SUPID, MCA) VALUES(1,1,'X');
/* below is not working */
DELETE FROM ITEM WHERE ITEMID = 1 AND MCA ='A';
http://sqlfiddle.com/#!9/fb961/1
我已經找到一個解決方案,但不知道它的對錯。
SET FOREIGN_KEY_CHECKS = 0;
DELETE FROM ITEM WHERE ITEMID =1 AND MCA ='A';
SET FOREIGN_KEY_CHECKS = 1;
爲什麼您的FK(ITEMID)而不是(ITEMID,MCA)? – philipxy 2014-09-21 21:07:32