복합 기본 키의 일부만 참조하는 외래 키가있을 때 상위 테이블에서 삭제하는 방법 ?? 난의 MySQL 5.6.2mysql 복합 기본 키의 일부만 참조하는 외래 키
사용하고
저는 기본 키 itemsup가 기본 키 항목 (A, B) 및 상품 공급 업체가 하나 개의 항목 테이블 (A, X를, Y)있다. 난 = itemsup (A) 항목 (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;
(ITEMID, MCA) 대신 FK (ITEMID)가있는 이유는 무엇입니까? – philipxy