MySQL 中的错误代码 1022

Error Code 1022 in MySQL

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

ASSIGNMENT (ProjectID, EmployeeNumber, HoursWorked)

ProjectIDEmployeeNumber是tableASSIGNMENT的复合主键和table的外键PROJECTEMPLOYEE(见下文)

这是我的数据:

CREATE TABLE IF NOT EXISTS ASSIGNMENT( ProjectID Int(4) NOT NULL AUTO_INCREMENT, EmployeeNumber Int(4) NOT NULL, HoursWorked Int(4) NOT NULL, PRIMARY KEY (ProjectID), UNIQUE (EmployeeNumber), KEY ProjectFK (ProjectID), KEY EmployeeFK (EmployeeNumber), CONSTRAINT ProjectFK FOREIGN KEY (ProjectID) REFERENCES PROJECT(ProjectID) ON DELETE CASCADE, CONSTRAINT EmployeeFK FOREIGN KEY (EmployeeNumber) REFERENCES EMPLOYEE(EmployeeNumber) );

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

这是整个模式的数据:

CREATE SCHEMA IF NOT EXISTS WPC;

CREATE TABLE IF NOT EXISTS DEPARTMENT( Department Char(30) NOT NULL DEFAULT 'Human Resources', BudgetCode Int(20) NOT NULL, OfficeNumber Int(10) NOT NULL, Phone Char(12) NULL, PRIMARY KEY (Department));

CREATE TABLE IF NOT EXISTS EMPLOYEE( EmployeeNumber Int(4) NOT NULL AUTO_INCREMENT, FirstName Char(25) NOT NULL, LastName Char(25) NOT NULL, Department Char(30) NOT NULL, Phone Char(17) NULL, Email VarChar(100) NOT NULL, PRIMARY KEY (EmployeeNumber), UNIQUE KEY Email (Email), KEY DepartmentFK (Department), CONSTRAINT DepartmentFK FOREIGN KEY (Department) REFERENCES DEPARTMENT(Department) ON DELETE RESTRICT ON UPDATE CASCADE );

CREATE TABLE IF NOT EXISTS PROJECT( ProjectID Int(4) AUTO_INCREMENT, ProjectName Char(20) NOT NULL, Department Char(30) NOT NULL, MaxHours Int(14) NOT NULL DEFAULT 100, StartDate Char(10) NOT NULL, EndDate Char(10) NULL, PRIMARY KEY (ProjectID), KEY ProjectFK (Department), CONSTRAINT ProjectFK FOREIGN KEY (Department) REFERENCES DEPARTMENT(Department) ON DELETE RESTRICT ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=1000;

SET @@AUTO_INCREMENT_INCREMENT=100;

CREATE TABLE IF NOT EXISTS ASSIGNMENT( ProjectID Int(4) NOT NULL AUTO_INCREMENT, EmployeeNumber Int(4) NOT NULL, HoursWorked Int(4) NOT NULL, PRIMARY KEY (ProjectID), UNIQUE (EmployeeNumber), KEY ProjectFK (ProjectID), KEY EmployeeFK (EmployeeNumber), CONSTRAINT ProjectFK FOREIGN KEY (ProjectID) REFERENCES PROJECT(ProjectID) ON DELETE CASCADE, CONSTRAINT EmployeeFK FOREIGN KEY (EmployeeNumber) REFERENCES EMPLOYEE(EmployeeNumber) );

ProjectIDEmployeeNumber是tableASSIGNMENT中的复合主键。它们也是引用 tables PROJECTEMPLOYEE.

的外键

除了 ASSIGNMENT table 之外,数据库的一切都很好。当我 运行 ASSIGNMENT 的脚本时,我得到这样的回复:

Error Code: 1022. Can't write; duplicate key in table 'assignment'.

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

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

更改 table 之一的 FK 约束名称。