【问题标题】:Error Code: 1824. Failed to open the referenced table even though it is already created错误代码:1824。无法打开引用的表,即使它已经创建
【发布时间】:2021-11-17 23:02:10
【问题描述】:

我正在为一个学校项目构建一个数据库,但由于某种原因,我无法在 2 个表(仅这 2 个)之间进行外键引用。我的项目有 14 个表,它适用于所有其他表。

表格如下:

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)
);

然后我尝试更改表以便建立外键连接:

alter table has_degree add foreign key (degree_title) references degree(title);
alter table has_degree add foreign key (degree_idryma) references degree(idryma);

但我继续得到

错误代码:1824。无法打开引用的表'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)
);

但唯一改变的是我得到了

错误代码:1822。添加外键约束失败。引用表“degree”中的约束“has_degree_ibfk_2”缺少索引

【问题讨论】:

    标签: mysql sql datatables


    【解决方案1】:

    has_degree中的外键列必须与引用表degree的主键列相同。

    在这种情况下,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),
    

    【讨论】:

    • 非常感谢。我不知道它必须是那样的!谢谢
    猜你喜欢
    • 2021-12-17
    • 2020-07-04
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2012-02-19
    • 2020-10-31
    相关资源
    最近更新 更多