[英]Oracle mySQL : Cannot add foreign key constraint
我正在创建一个数据库表。 具体来说,这段代码由于某种原因不会添加两个外键,它表示无法添加外键约束,我将向您展示我所指的表。
mysql> ALTER TABLE PROGRAM
-> ADD SeriesName varchar(100) NOT NULL, ADD StartYear char(4) NOT NULL,
-> ADD CONSTRAINT program_seriesname_fk
-> FOREIGN KEY(SeriesName) REFERENCES SERIES(SeriesName),
-> ADD CONSTRAINT program_startyear_fk
-> FOREIGN KEY(StartYear) REFERENCES SERIES(StartYear);
ERROR 1215 (HY000): Cannot add foreign key constraint
SERIES表具有PROGRAM表,这意味着它是1:N(一对多关系)。 因此,SERIES中的两个主键成为PROGRAM中的两个外键。
mysql> describe series;
+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| SeriesName | varchar(100) | NO | PRI | | |
| StartYear | char(4) | NO | PRI | | |
| EndYear | char(4) | YES | | NULL | |
+------------+--------------+------+-----+---------+-------+
3 rows in set (0.07 sec)
mysql> describe program;
+-------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| ProgramName | varchar(50) | NO | PRI | | |
| Description | varchar(255) | YES | | NULL | |
| Recorded | date | NO | | NULL | |
+-------------+--------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
您在series
表上有复合PK,因此您不能在FK约束中单独使用此字段
ADD CONSTRAINT program_seriesname_fk
FOREIGN KEY(SeriesName, StartYear) REFERENCES SERIES(SeriesName, StartYear)
要在InnoDB中为单个列创建外键,您引用的列必须是至少一个索引中的第一列。
ALTER TABLE program
ADD CONSTRAINT program_startyear_fk
FOREIGN KEY(StartYear) REFERENCES SERIES(StartYear);
因为SERIES(StartYear)是SERIES主键索引中的第二列,所以不起作用。 如果你先添加一个索引;
CREATE INDEX ix_program ON series(StartYear);
ALTER TABLE program
ADD CONSTRAINT program_startyear_fk
FOREIGN KEY(StartYear) REFERENCES SERIES(StartYear);
......它会起作用的。
现在,如果你真正寻找的是一个真正的综合指数,@ Parado的答案是你想要什么,只是想指出的是,指数不必是复合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.