如何解决1822 (HY000): 添加外键约束失败
我的代码如下:
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,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,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”的以下错误:
1822 (HY000):无法添加外键约束。缺少索引 对于引用表中的约束“horariomesamanager_ibfk_1” '台面'
对于表“ReservacionMesaManager”:
1822 (HY000):无法添加外键约束。缺少索引 对于引用表中的约束“reservacionmesamanager_ibfk_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
);
其他外键引用依此类推。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。