主键和外键引用顺序很重要

时间:2018-02-26 10:28:30

标签: mysql foreign-keys primary-key

我正在创建一个包含视频租借信息的数据库。在复制表中,我有电影号码(FNr)和副本号码(cpyNr)作为主键(还有更多,但为了简化我删除它们的问题)。在第二个表中,租金,电影号码(FNr),复制号码(cpyNr)和客户号码(CNr)是密钥的一部分。副本号从副本表中引用。电影号码和客户编号将从其他地方引用,但与问题无关,我为了简单起见将其删除。

问题是,当我现在运行下面的代码时,它不起作用。我得到一个外键约束失败。

drop database if exists video;
create database video;
use video;

CREATE TABLE copy
(
FNr INT,
cpyNr INT,
CONSTRAINT copyPK
PRIMARY KEY (FNr,cpyNr)
);

CREATE TABLE rent
(
FNr INT,
cpyNr INT,
CNr INT,
CONSTRAINT rentPK
PRIMARY KEY (FNr,cpyNr,CNr),
CONSTRAINT copyPK FOREIGN KEY (cpyNr) 
REFERENCES copy(cpyNr)
);

如果我将复制主键中列的顺序更改为

,则可以起作用
PRIMARY KEY (cpyNr,FNr)

它确实有效,但我无法理解为什么。

0 个答案:

没有答案