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

Why can't i add a foreign key formed of two columns?

为什么我不能在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 table catalog/note 的外键约束错误:\n 外键(id_student, id_materie) 引用 inscris(id_student, id_materie)):\n无法在引用的 table 中找到索引,其中 the\nreferenced 列显示为第一列,或列 types\nin table 和引用的 table 与约束不匹配。\n请注意,ENUM 和 SET 的内部存储类型已更改 in\ntables 使用 >= InnoDB 创建-4.1.12,旧 tables\ncannot 中的此类列被新 table 中的此类列引用。\n请参阅 http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html 以了解正确的外键定义。

也许这个替代方案可以绕过您的问题。将第三列添加到 inscris table,并将第三列设为主键。然后将您的 note 外键引用到该主键列。

外键必须引用一个键,您需要在 inscris 中添加一个索引,其中包括在注释的 FK 中引用的两个字段。其他 FK 起作用不是因为它们是单列,而是因为引用的列已编入索引。