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,
从逻辑上讲,外键应该是UNIQUE
或PRIMARY 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 无法添加外键约束