我正在创建一个包含视频租借信息的数据库。在复制表中,我有电影号码(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)
它确实有效,但我无法理解为什么。