gpt4 book ai didi

mysql - MySQL 中的错误代码 1022

转载 作者:搜寻专家 更新时间:2023-10-30 23:44:00 24 4
gpt4 key购买 nike

我对数据库处理还很陌生。我正在尝试创建表

ASSIGNMENT(ProjectID、EmployeeNumber、HoursWorked)

ProjectIDEmployeeNumber 是表 ASSIGNMENT 的复合主键和表 PROJECT 的外键>员工(见下文)

这是我的数据:

如果赋值不存在则创建表(
ProjectID Int(4) NOT NULL AUTO_INCREMENT,
EmployeeNumber Int(4) NOT NULL,
HoursWorked Int(4) 不为空,
主键(项目 ID),
唯一(员工编号),
KEY ProjectFK(项目ID),
KEY EmployeeFK(员工编号),
CONSTRAINT ProjectFK FOREIGN KEY (ProjectID) REFERENCES PROJECT(ProjectID) ON DELETE CASCADE,
约束 EmployeeFK FOREIGN KEY (EmployeeNumber) REFERENCES EMPLOYEE(EmployeeNumber)
);

我见过很多这样的例子,但是这个例子的独特之处在于 MySQL 不允许在一个表中有两个主键所以我将 EmployeeNumber 设为唯一键。

这是整个模式的数据:

如果 WPC 不存在则创建模式;

如果部门不存在则创建表(
部门 Char(30) NOT NULL DEFAULT '人力资源',
BudgetCode Int(20) NOT NULL,
OfficeNumber Int(10) NOT NULL,
电话字符 (12) NULL,
主键(部门));

如果员工不存在则创建表(
EmployeeNumber Int(4) NOT NULL AUTO_INCREMENT,
FirstName Char(25) NOT NULL,
姓氏 Char(25) 不为空,
部门 Char(30) NOT NULL,
电话字符 (17) NULL,
电子邮件 VarChar(100) NOT NULL,
主键(员工编号),
唯一 key 电子邮件(电子邮件),
KEY DepartmentFK(部门),
约束 DepartmentFK FOREIGN KEY (Department) REFERENCES DEPARTMENT(Department) ON DELETE RESTRICT ON UPDATE CASCADE
);

如果项目不存在则创建表(
项目 ID Int(4) AUTO_INCREMENT,
项目名称 Char(20) NOT NULL,
部门 Char(30) NOT NULL,
MaxHours Int(14) NOT NULL 默认值 100,
StartDate Char(10) 不为空,
结束日期 Char(10) NULL,
主键(项目 ID),
KEY ProjectFK(部门),
CONSTRAINT ProjectFK FOREIGN KEY (Department) REFERENCES DEPARTMENT(Department) ON DELETE RESTRICT ON UPDATE CASCADE
)
ENGINE=InnoDB AUTO_INCREMENT=1000;

SET @@AUTO_INCREMENT_INCREMENT=100;

如果赋值不存在则创建表(
ProjectID Int(4) NOT NULL AUTO_INCREMENT,
EmployeeNumber Int(4) NOT NULL,
HoursWorked Int(4) 不为空,
主键(项目 ID),
唯一(员工编号),
KEY ProjectFK(项目ID),
KEY EmployeeFK(员工编号),
CONSTRAINT ProjectFK FOREIGN KEY (ProjectID) REFERENCES PROJECT(ProjectID) ON DELETE CASCADE,
约束 EmployeeFK FOREIGN KEY (EmployeeNumber) REFERENCES EMPLOYEE(EmployeeNumber)
);

ProjectIDEmployeeNumber 是表 ASSIGNMENT 中的复合主键。它们也是引用表 PROJECTEMPLOYEE 的外键。

除了 ASSIGNMENT 表外,数据库的一切都很好。当我为 ASSIGNMENT 运行脚本时,我得到了这样的响应:

错误代码:1022。无法写入;表“分配”中的重复键。

最佳答案

用于外键约束的名称在数据库中必须是唯一的。您正在尝试对不同表上的外键使用相同的名称。

您正在 PROJECT 表上使用名称 ProjectFK,并试图在 ASSIGNMENT 表上再次使用相同的名称。

更改其中一个表的 FK 约束名称。

关于mysql - MySQL 中的错误代码 1022,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31330448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com