当我执行以下SQL代码来创建数据库和表时,我收到错误消息:Error Code: 1215. Cannot add foreign key constraint
。如果我将test.book.storeID
作为主键,则代码可以正常工作。引用的列是否必须是主键?
CREATE SCHEMA IF NOT EXISTS `test` DEFAULT CHARACTER SET utf8 ;
USE `test` ;
CREATE TABLE IF NOT EXISTS `test`.`book` (
`ID` INT UNSIGNED NOT NULL,
`storeID` INT UNSIGNED NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE INDEX `storeID_UNIQUE` (`storeID` ASC))
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `test`.`shoppingCartItem` (
`userID` INT UNSIGNED NOT NULL,
`bookID` INT UNSIGNED NOT NULL,
`storeID` INT UNSIGNED NOT NULL,
PRIMARY KEY (`userID`, `bookID`),
INDEX `fk_idx` (`bookID` ASC, `storeID` ASC),
CONSTRAINT `fk`
FOREIGN KEY (`bookID` , `storeID`)
REFERENCES `test`.`book` (`ID` , `storeID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
答案 0 :(得分:1)
外键引用应该是主键,尽管它也可以是唯一键。 MySQL允许外键关系到任何索引列,但我不建议这样做。
因此,外键引用应为:
FOREIGN KEY (`bookID`) REFERENCES `test`.`book` (`ID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION
我确实怀疑为什么你在两个表中都有storeid
。如果它们必须相同,那么它应该只在一个表中,你可以使用密钥查找它。
答案 1 :(得分:0)
查看此问题中的答案是否有助does foreign key always reference to a unique key in another table?,基本上它必须是唯一的,而不是主要的。