我查看了有关此主题的其他问题,普遍的共识是检查我的数据类型一致性。我正在尝试创建以 SSN 和 ProjectID 作为外键的表“reviews”,引用来自 Table Reviewer 的 SSN 和来自 Table Project 的 ProjectID
CREATE TABLE Reviews(
ProjectID VARCHAR(10) NOT NULL,
SSN INTEGER NOT NULL CHECK
(SSN>100000000 AND SSN<999999999),
ReviewerRole VARCHAR(50) NOT NULL,
FOREIGN KEY(SSN)REFERENCES Reviewer(SSN),
FOREIGN KEY(ProjectID)REFERENCES Project(ProjectID),
PRIMARY KEY(SSN,ProjectID)
);
下面是'Project'和'Reviewer'的建表语句
CREATE TABLE Reviewer(
SSN INTEGER NOT NULL CHECK (SSN>100000000 AND SSN<999999999),
Firstname VARCHAR(50) NOT NULL,
Lastname VARCHAR(50) NOT NULL
);
CREATE TABLE Project(
ProjectID VARCHAR(10) NOT NULL,
Title VARCHAR(50),
Archived DATE NOT NULL,
ProjectStatus VARCHAR(50) NOT NULL,
PRIMARY KEY(ProjectID)
);
项目和审阅者创建没有问题。如果我删除 SSN 的 FK 声明并保留 ProjectID 的 FK 声明,我的创建评论查询会起作用,但反之则不行。
错误的原因是什么?我需要添加另一个约束吗?
最佳答案
您忘记将主键添加到 Reviewer 表中的 SSN 列。下面的查询在 sqlfiddle 中正确构建:
CREATE TABLE Reviewer(
SSN INTEGER NOT NULL CHECK (SSN>100000000 AND SSN<999999999),
Firstname VARCHAR(50) NOT NULL,
Lastname VARCHAR(50) NOT NULL,
PRIMARY KEY(SSN)
);
CREATE TABLE Project(
ProjectID VARCHAR(10) NOT NULL,
Title VARCHAR(50),
Archived DATE NOT NULL,
ProjectStatus VARCHAR(50) NOT NULL,
PRIMARY KEY(ProjectID)
);
CREATE TABLE Reviews(
ProjectID VARCHAR(10) NOT NULL,
SSN INTEGER NOT NULL CHECK
(SSN>100000000 AND SSN<999999999),
ReviewerRole VARCHAR(50) NOT NULL,
FOREIGN KEY(SSN)REFERENCES Reviewer(SSN),
FOREIGN KEY(ProjectID)REFERENCES Project(ProjectID),
PRIMARY KEY(SSN,ProjectID)
);
关于mysql - SQL 错误 1215(HY000) 无法添加外键约束。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29583686/