错误代码:1824。无法打开引用的 table,即使它已经创建
Error Code: 1824. Failed to open the referenced table even though it is already created
我正在为一个学校项目构建一个数据库,但出于某种原因,我无法在 2 table 之间(仅这 2 个)创建外键引用。我的项目有 14 tables,它适用于所有其他项目。
table 的制作方式如下:
create table degree(
title varchar(50),
idryma varchar(40),
bathmida enum('High School', 'Univercity', 'Master', 'PHD'),
constraint degree_id primary key (title, idryma)
);
create table has_degree(
degree_title varchar(50),
degree_idryma varchar(40),
employee_username varchar(12),
acquisition_year year(4),
grade float(3,1),
constraint has_degree_id primary key (degree_title, degree_idryma, employee_username)
);
然后我尝试更改 table 以便建立外键连接:
alter table has_degree add foreign key (degree_title) references degree(title);
alter table has_degree add foreign key (degree_idryma) references degree(idryma);
但我不断得到
Error Code: 1824. Failed to open the referenced table 'degree'
我试过把它们做成那样:
create table degree(
title varchar(50),
idryma varchar(40),
bathmida enum('High School', 'Univercity', 'Master', 'PHD'),
constraint degree_id primary key (title, idryma)
);
create table has_degree(
degree_title varchar(50),
degree_idryma varchar(40),
employee_username varchar(12),
acquisition_year year(4),
grade float(3,1),
foreign key (degree_title) references degree(title),
foreign key (degree_idryma) references degree(idryma),
/*employee is an other table that I use and that works just fine*/
foreign key (employee_username) references employee(employee_username),
constraint has_degree_id primary key (degree_title, degree_idryma, employee_username)
);
但唯一改变的是我得到了
Error Code: 1822. Failed to add the foreign key constraint. Missing index for constraint 'has_degree_ibfk_2' in the referenced table 'degree'
table has_degree
中的外键列必须与引用的 table degree
.[=20 的主键中的列相同=]
在这种情况下,degree
的主键由两个 varchar
列组成。
因此 has_degree
中引用它的外键也必须只有两个 varchar
列,并且 has_degree
中那些列中的值必须与degree
.
您是这样定义外键的:
foreign key (degree_title) references degree(title),
foreign key (degree_idryma) references degree(idryma),
但那是 两个 外键,每个外键都有一个列。您需要一个包含两列的外键:
foreign key (degree_title, degree_idryma) references degree(title, idryma),
我正在为一个学校项目构建一个数据库,但出于某种原因,我无法在 2 table 之间(仅这 2 个)创建外键引用。我的项目有 14 tables,它适用于所有其他项目。
table 的制作方式如下:
create table degree(
title varchar(50),
idryma varchar(40),
bathmida enum('High School', 'Univercity', 'Master', 'PHD'),
constraint degree_id primary key (title, idryma)
);
create table has_degree(
degree_title varchar(50),
degree_idryma varchar(40),
employee_username varchar(12),
acquisition_year year(4),
grade float(3,1),
constraint has_degree_id primary key (degree_title, degree_idryma, employee_username)
);
然后我尝试更改 table 以便建立外键连接:
alter table has_degree add foreign key (degree_title) references degree(title);
alter table has_degree add foreign key (degree_idryma) references degree(idryma);
但我不断得到
Error Code: 1824. Failed to open the referenced table 'degree'
我试过把它们做成那样:
create table degree(
title varchar(50),
idryma varchar(40),
bathmida enum('High School', 'Univercity', 'Master', 'PHD'),
constraint degree_id primary key (title, idryma)
);
create table has_degree(
degree_title varchar(50),
degree_idryma varchar(40),
employee_username varchar(12),
acquisition_year year(4),
grade float(3,1),
foreign key (degree_title) references degree(title),
foreign key (degree_idryma) references degree(idryma),
/*employee is an other table that I use and that works just fine*/
foreign key (employee_username) references employee(employee_username),
constraint has_degree_id primary key (degree_title, degree_idryma, employee_username)
);
但唯一改变的是我得到了
Error Code: 1822. Failed to add the foreign key constraint. Missing index for constraint 'has_degree_ibfk_2' in the referenced table 'degree'
table has_degree
中的外键列必须与引用的 table degree
.[=20 的主键中的列相同=]
在这种情况下,degree
的主键由两个 varchar
列组成。
因此 has_degree
中引用它的外键也必须只有两个 varchar
列,并且 has_degree
中那些列中的值必须与degree
.
您是这样定义外键的:
foreign key (degree_title) references degree(title),
foreign key (degree_idryma) references degree(idryma),
但那是 两个 外键,每个外键都有一个列。您需要一个包含两列的外键:
foreign key (degree_title, degree_idryma) references degree(title, idryma),