gpt4 book ai didi

mysql - 我在这里做错了什么

转载 作者:行者123 更新时间:2023-11-30 22:09:30 25 4
gpt4 key购买 nike

我是数据库领域的新手,请多多包涵。我只是想添加外键约束,但一直收到错误 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,然后返回并添加该外键。

  1. CREATE TABLE PartNumbers,因为 SamplesReceived 和 AllRecords 需要它
  2. CREATE TABLE SamplesReceived,因为 InProcessSamples 和 AllRecords 需要它
  3. CREATE TABLE AllRecords,因为 InProcessSamples 需要它
  4. ALTER TABLE SamplesReceived ADD FOREIGN KEY(SampleNumber) REFERENCES AllRecords(SampleNumber);
  5. 创建表 InProcessSamples

那是如果确实需要循环引用。

但正如其他人所回答的那样,也许您的循环引用并不是一个好的设计。

可能需要循环引用;在您的情况下,它的作用是强制对于 SamplesReceived 中的每一行,您必须在 AllRecords 中有一个匹配行,反之亦然,AllRecords 中的每一行都必须在 SamplesReceived 中有一个匹配行。

我不知道为什么这在您的应用程序中很重要。可能是,但您没有告诉我们任何有关您尝试建模的工作流程的信息,所以我无法判断。

关于mysql - 我在这里做错了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40564651/

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