为什么我不能添加由两列组成的外键?

时间:2017-05-18 16:47:36

标签: mysql foreign-keys foreign-key-relationship

为什么我无法在note中添加外键组?

我得到Error Code: 1215. Cannot add foreign key constraint

create table student(
    id_student int auto_increment not null,
    prenume varchar(255) not null,
    nume varchar(255) not null,
    constraint id_student_pk_STUDENT primary key(id_student));

create table materie(
    id_materie int auto_increment not null,
    nume_materie varchar(255) not null,
    constraint id_materie_pk_MATERIE primary key(id_materie));

create table inscris(
    id_student int not null,
    id_materie int not null,
    constraint id_student_fk_INSCRIS foreign key(id_student) references student(id_student),
    constraint id_materie_fk_INSCRIS foreign key(id_materie) references materie(id_materie));

create table note(
    id_student int not null,
    id_materie int not null,
    nota int,
    constraint fk_id_student_materie_NOTE foreign key(id_student, id_materie) references inscris(id_student, id_materie));

这是show engine innodb status所说的:

LATEST FOREIGN KEY ERROR \ n ------------------------ \ n2017-05-18 19:44:21 0x700007362000错误表目录的外键约束/注意:\ n外键(id_student,id_materie)引用inscris(id_student,id_materie)):\ n无法在引用的表中找到索引,其中\ nreferenced列显示为第一列或列类型\ n表中和引用的表与约束不匹配。\ n请注意,使用> = InnoDB-4.1.12创建的\ ntables中ENUM和SET的内部存储类型已更改,旧表中的此类列\ n无法引用通过新表中的这些列。\ n请参考http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html以获取正确的外键定义。

2 个答案:

答案 0 :(得分:1)

外键必须引用一个键,你需要在inscris中添加一个索引,其中包括note的FK中引用的两个字段。其他FK的工作原因不是因为它们是单列,而是因为引用的列是索引的。

答案 1 :(得分:0)

也许这种替代方案会绕过你的问题。将第三列添加到inscris表,并将第三列作为主键。然后将您的note外键引用到该主键列。