为什么我不能添加由两列组成的外键?
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 起作用不是因为它们是单列,而是因为引用的列已编入索引。
为什么我不能在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 起作用不是因为它们是单列,而是因为引用的列已编入索引。