【问题标题】:Error Code: 1826. Duplicate foreign key constraint name 'menu_ibfk_1'错误代码:1826。重复的外键约束名称“menu_ibfk_1”
【发布时间】:2021-03-10 09:16:00
【问题描述】:

我在 MySQL 上编写代码,但它给了我错误。

这是我的代码,它给了我错误 - “错误代码:1826。重复的外键约束名称'menu_ibfk_1'”

当我给出不同的约束名称时,它给了我错误 - “错误代码:1822。无法添加外键约束。在引用的表 'menu' 中缺少约束 'menu_ibfk_2' 的索引”

create database WasteManagement;
CREATE TABLE WasteManagement.Faculty_login ( 
Faculty_ID int(9) NOT NULL  ,
FName varchar(50) DEFAULT NULL,
Department varchar(20) DEFAULT NULL, 
Password varchar(20) DEFAULT NULL, 
PRIMARY KEY (Faculty_ID) );

CREATE TABLE WasteManagement.Student_login ( 
Enrollment_No int(11) NOT NULL , 
SName varchar(50) DEFAULT NULL, 
Course varchar(20) DEFAULT NULL, 
Password varchar(20) DEFAULT NULL, 
PRIMARY KEY (Enrollment_No) );

CREATE TABLE WasteManagement.Staff_login ( 
Staff_ID int(9) NOT NULL  ,
CName varchar(50) DEFAULT NULL,
Username varchar(20) DEFAULT NULL, 
Password varchar(20) DEFAULT NULL, 
PRIMARY KEY (Staff_ID) );

CREATE TABLE WasteManagement.Menu ( 
Staff_ID int(9) NOT NULL,
Datee date NOT NULL DEFAULT 0,
Timee varchar(10) NOT NULL,
Dish varchar(30) NOT NULL, 
PRIMARY KEY (Datee, Timee, Dish)
#FOREIGN KEY (Staff_ID) References Menu(Staff_ID) 
);

CREATE TABLE WasteManagement.Demand1 ( 
Datee date NOT NULL DEFAULT 0,
Timee varchar(10) NOT NULL,
Dish varchar(30) NOT NULL, 
S_demand BOOLEAN DEFAULT FALSE, 
PRIMARY KEY (Datee, Timee, Dish, S_demand),
KEY d1 (datee),
KEY t1 (Timee),
KEY dish1 (Dish),
#KEY `AuthorID` (`AuthorID`),
CONSTRAINT `menu_ibfk_1` FOREIGN KEY (Datee) References Menu(Datee),
CONSTRAINT `menu_ibfk_1` FOREIGN KEY (Timee) References Menu(Timee),
CONSTRAINT `menu_ibfk_1` FOREIGN KEY (Dish) References Menu(Dish));

CREATE TABLE WasteManagement.Demand2 ( 
Datee date NOT NULL DEFAULT 0,
Timee varchar(10) NOT NULL,
Dish varchar(30) NOT NULL, 
F_demand BOOLEAN NOT NULL DEFAULT FALSE, 
PRIMARY KEY (Datee, Timee, Dish, F_demand),
CONSTRAINT `menu_ibfk_1` FOREIGN KEY (Datee) References Menu(Datee),
CONSTRAINT `menu_ibfk_1` FOREIGN KEY (Timee) References Menu(Timee),
CONSTRAINT `menu_ibfk_1` FOREIGN KEY (Dish) References Menu(Dish));

CREATE TABLE WasteManagement.Feedback1 ( 
Datee date NOT NULL DEFAULT 0,
Timee varchar(10) NOT NULL,
Dish varchar(30) NOT NULL, 
eaten_by1 int(7) NOT NULL, 
s_rating int(1) NOT NULL,
PRIMARY KEY (Datee, Timee, Dish, eaten_by1, s_rating),
CONSTRAINT `menu_ibfk_1` FOREIGN KEY (Datee) References Menu(Datee),
CONSTRAINT `menu_ibfk_1` FOREIGN KEY (Timee) References Menu(Timee),
CONSTRAINT `menu_ibfk_1` FOREIGN KEY (Dish) References Menu(Dish));

CREATE TABLE WasteManagement.Feedback2 ( 
Datee date NOT NULL DEFAULT 0,
Timee varchar(10) NOT NULL,
Dish varchar(30) NOT NULL, 
eaten_by2 int(7) NOT NULL, 
f_rating int(1) NOT NULL,
PRIMARY KEY (Datee, Timee, Dish, eaten_by2, f_rating),
CONSTRAINT `menu_ibfk_1` FOREIGN KEY (Datee) References Menu(Datee),
CONSTRAINT `menu_ibfk_1` FOREIGN KEY (Timee) References Menu(Timee),
CONSTRAINT `menu_ibfk_1` FOREIGN KEY (Dish) References Menu (Dish));

CREATE TABLE WasteManagement.Wastage ( 
Datee date NOT NULL DEFAULT 0,
Timee varchar(10) NOT NULL,
Dish varchar(30) NOT NULL, 
Produced_qty int(7) NOT NULL, 
Wasted_qty int(7) NOT NULL,
PRIMARY KEY (Datee, Time, Dish, Produced_qty, Wasted_qty),
CONSTRAINT `menu_ibfk_1` FOREIGN KEY (Datee) References Menu(Datee),
CONSTRAINT `menu_ibfk_1` FOREIGN KEY (Timee) References Menu(Timee),
CONSTRAINT `menu_ibfk_1` FOREIGN KEY (Dish) References Menu(Dish));

这是 MySQL 输出的快照

MySQL output snapshot

我做错了什么?

【问题讨论】:

  • 当然,您可以将示例简化为两个或三个表。
  • 要么跳过约束名称,要么为每个外键设置唯一的名称。
  • 它仍然给出没有约束名称的错误 - 错误代码:1822。无法添加外键约束。引用表 'menu' 中的约束 'demand1_ibfk_2' 缺少索引
  • 这是另一个问题。正如 Gordon 所说,尽量减少问题 - minimal reproducible example。助您轻松!
  • 如果我没记错的话,mysql 不允许多个外键同名。至于您的第二个错误,您的 Menu 表的 DDL(创建语句)是什么?

标签: mysql sql compiler-errors runtime-error error-code


【解决方案1】:

外键必须引用完整的键:

FOREIGN KEY (Datee, Timee, Dish) References Menu(Datee, Timee, Dish)

每个约束都必须有自己的唯一名称。

【讨论】:

  • ... + 根据Menu 表中的复合索引。
猜你喜欢
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 2016-02-01
  • 2013-07-15
相关资源
最近更新 更多