mysql - SQL 错误 1215(HY000) 无法添加外键约束。

标签 mysql sql sql-server foreign-keys

我查看了有关此主题的其他问题,普遍的共识是检查我的数据类型一致性。我正在尝试创建以 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/

相关文章:

MySQL基于最近10个日期的嵌套查询

mysql - 选择表中的最低日期

mysql - COUNT和COUNT,GROUP BY先算

python - 在 Python 中执行 MySQL 查询无法正常工作

sql - 在 native SQL 中批量提交大型 INSERT 操作?

mysql - 是否可以使用 Ruby Sequel 实现 SUBSTRING_INDEX 逻辑来创建列别名?

mysql - Cakephp 分页不起作用?

sql-server - 在 SQL Server 中,如何在层次结构模型中强制执行唯一的孙子名称?

SQL Server如何对每个不同的集合应用限制并将值作为一列?

php - 打印搜索结果时如何替换 mysqli_fetch_array 上的 'value'?