错误代码: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),