作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是数据库领域的新手,请多多包涵。我只是想添加外键约束,但一直收到错误 1215“无法添加外键约束”。
CREATE TABLE InProcessSamples
(
SampleNumber Int(6),
WorkOrder Int(8),
DueDate Date,
BeginsTesting Date,
FinishedTesting Date,
CONSTRAINT fk_sample_number FOREIGN KEY(SampleNumber) REFERENCES AllRecords(SampleNumber),
CONSTRAINT fk_work_order FOREIGN KEY(WorkOrder) REFERENCES SamplesReceived(WorkOrder)
);
CREATE TABLE SamplesReceived
(
WorkOrder Int(8) PRIMARY KEY,
SampleNumber Int(6),
RecTimeStamp DateTime,
PartNumber Int(10),
Description Char(36),
CONSTRAINT fk_sample_number FOREIGN KEY(SampleNumber) REFERENCES AllRecords(SampleNumber),
CONSTRAINT fk_part_number FOREIGN KEY(PartNumber) REFERENCES PartNumbers(PartNumber)
);
CREATE TABLE AllRecords
(
SampleNumber Int(6) PRIMARY KEY,
WorkOrder Int(8),
DueDate Date,
BeginsTesting Date,
FinishedTesting Date,
RecTimeStamp DateTime,
MeasurementOne Double,
MeasurementTwo Double,
PassDielectric Char(3),
PassedAllTest Char(3),
CONSTRAINT fk_work_order FOREIGN KEY(WorkOrder) REFERENCES SamplesReceived(WorkOrder),
CONSTRAINT fk_part_number FOREIGN KEY(PartNumber) REFERENCES PartNumbers(PartNumber)
);
CREATE TABLE PartNumbers
(
PartNumber Int(10) PRIMARY KEY,
Description Char(36)
);
最佳答案
无论您的设计是否关闭,您都不能声明对尚未创建的表的外键引用。
CREATE TABLE
语句按 SQL 脚本从上到下的顺序进行评估。由于 MySQL 正在尝试创建第一个表,因此第二个和第三个表尚不存在。所以没有任何外键可以引用。
在创建具有引用它的外键的表之前,您应该按照允许引用表存在的顺序创建表。在这种情况下,您有一个循环依赖,因此唯一的方法是创建没有其外键之一的 SamplesReceived 或 AllRecords,然后返回并添加该外键。
CREATE TABLE PartNumbers
,因为 SamplesReceived 和 AllRecords 需要它CREATE TABLE SamplesReceived
,因为 InProcessSamples 和 AllRecords 需要它CREATE TABLE AllRecords
,因为 InProcessSamples 需要它ALTER TABLE SamplesReceived ADD FOREIGN KEY(SampleNumber) REFERENCES AllRecords(SampleNumber);
创建表 InProcessSamples
那是如果确实需要循环引用。
但正如其他人所回答的那样,也许您的循环引用并不是一个好的设计。
可能需要循环引用;在您的情况下,它的作用是强制对于 SamplesReceived 中的每一行,您必须在 AllRecords 中有一个匹配行,反之亦然,AllRecords 中的每一行都必须在 SamplesReceived 中有一个匹配行。
我不知道为什么这在您的应用程序中很重要。可能是,但您没有告诉我们任何有关您尝试建模的工作流程的信息,所以我无法判断。
关于mysql - 我在这里做错了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40564651/
我是一名优秀的程序员,十分优秀!