繁体   English   中英

MySQL:引用的列是否需要为主键?

[英]MySQL: Does the referenced column need to be primary key?

当我执行以下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;

外键引用应该是主键,尽管也可以是唯一键。 MySQL允许外键关系到任何索引列,但我不建议这样做。

因此,外键引用应为:

FOREIGN KEY (`bookID`) REFERENCES `test`.`book` (`ID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION

我确实质疑您为什么在两个表中都有storeid 如果需要相同,则只能在一个表中,您可以使用键进行查找。

看看这个问题的答案是否对外键始终引用另一个表中的唯一键有所帮助 ,基本上它必须是唯一的,而不是主要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM