1822 (HY000): 添加外键约束失败

Posted

技术标签:

【中文标题】1822 (HY000): 添加外键约束失败【英文标题】:1822 (HY000): Failed to add the foreign key constraint 【发布时间】:2021-06-11 16:50:18 【问题描述】:

我的代码如下:

CREATE TABLE Mesas (
    ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Mesa CHAR(2) NOT NULL,
    Dispobilidad BOOLEAN NOT NULL DEFAULT True,
    Cantidad_Asientos TINYINT UNSIGNED NOT NULL DEFAULT 4
);

CREATE TABLE Reservacion (
    ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    A_Nombre_de VARCHAR(50) NOT NULL,
    Fecha DATE NOT NULL,
    Cantidad_Personas TINYINT UNSIGNED NOT NULL DEFAULT 1,
    Horario TIME NOT NULL,
    Email VARCHAR(50) NOT NULL DEFAULT "perenganito@gmail.com"
);

CREATE TABLE HorarioMesaManager (
    ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Horario TIME NOT NULL,
    Mesa CHAR(2) NOT NULL,
    FOREIGN KEY (Mesa) REFERENCES Mesas (Mesa) ON DELETE CASCADE,
    FOREIGN KEY (Horario) REFERENCES Reservacion (Horario) ON DELETE CASCADE
);

CREATE TABLE ReservacionMesaManager (
    ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Mesa CHAR(2) NOT NULL,
    A_Nombre_de VARCHAR(50) NOT NULL,
    Mesas_a_Ocupar TINYINT UNSIGNED NOT NULL,
    FOREIGN KEY (A_Nombre_de) REFERENCES Reservacion(A_Nombre_de) ON DELETE CASCADE,
    FOREIGN KEY (Mesa) REFERENCES Mesas(Mesa) ON DELETE CASCADE
);

但表“HorarioMesaManager”出现以下错误:

。缺少索引 对于引用表中的约束“horariomesamanager_ibfk_1” '台面'

对于表“ReservacionMesaManager”:

。缺少索引 对于引用表中的约束“reservacionmesamanager_ibfk_1” '预订'

我也不知道为什么。有人可以帮我解决这个问题吗?

非常感谢:)

【问题讨论】:

这能回答你的问题吗? mysql error: Missing index for constraint 是的!它解决了我的问题 【参考方案1】:

考虑这个外键定义:

FOREIGN KEY (Mesa) REFERENCES Mesas (Mesa) ON DELETE CASCADE,

从逻辑上讲,外键应该是UNIQUEPRIMARY KEY——最好是后者。 MySQL确实允许任何索引列的外键,但我不建议使用该“功能”(其他数据库不支持)。

主键是ID。所以你的声明应该是这样的:

CREATE TABLE HorarioMesaManager (
    ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Horario TIME NOT NULL,
    MesaId INT NOT NULL,
    FOREIGN KEY (MesaId) REFERENCES Mesas (ID) ON DELETE CASCADELETE CASCADE
);

对于其他外键引用,依此类推。

【讨论】:

以上是关于1822 (HY000): 添加外键约束失败的主要内容,如果未能解决你的问题,请参考以下文章

MySQL : ERROR 1215 (HY000): 无法添加外键约束

SQLSTATE[HY000]:一般错误:1215 无法添加外键约束 [Laravel 7.0]

SQLSTATE[HY000]:一般错误:1215 无法在表用户中添加外键约束 Laravel

Laravel 5.0 [PDOException] SQLSTATE[HY000]:一般错误:1215 无法添加外键约束

MySQL 错误 1822:添加外键约束失败;缺少约束索引但索引存在

一般错误:1005 无法创建表 errno:150“外键约束格式不正确”)