【问题标题】:Foreign key and referential integrity外键和参照完整性
【发布时间】:2021-06-20 15:49:58
【问题描述】:

我在使用 MySQL 时遇到了一个问题,这就是问题所在,我创建了两个名为 PersonsOrders 的表,Orders 表引用了 Persons 表作为以下查询显示,我在Persons 表中插入了值,但是,当我检查Orders 表时,我发现Persons 表的PersonID 列的值不包括在@ Orders 表的 987654330@ 列

CREATE TABLE Persons 
(
    PersonID INT NOT NULL UNIQUE PRIMARY KEY,
    LastName VARCHAR(60) NOT NULL,
    FirstName VARCHAR(60) NOT NULL,
    AGE INT NOT NULL,
);


CREATE TABLE Orders 
(
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);

【问题讨论】:

  • 样本数据和所需的输出会有所帮助。
  • 我不明白你的意思
  • 您的问题真的很困惑,您对@Kazi 回答的评论与您在问题中所说的相矛盾。我建议您重新开始,并提供示例数据并解释您认为数据的错误之处。像 MySQL 这样成熟、使用频繁的 DBMS 不太可能出错。
  • 在本例中,Persons 是“父”,Orders 是“子”。因为“父母”可能有零到多个“孩子”。我不确定您是否理解这些条款适用的方式。

标签: mysql foreign-keys relational-database


【解决方案1】:

在外键关系中,主表中可能有一个值,但外键列中没有。但是明细表的外键列中不能有值,而主表中不能有。

如果PersonIdPersons 表中但不在Orders 表中,则外键约束不会引起任何问题。但是,如果您尝试将PersonId 插入到Orders 表中,而该表在Persons 表的PersonId 列中不可用,则会引发错误。

希望以上讨论能帮助您得到答案。否则,请分享一些示例数据以澄清更多信息。

【讨论】:

  • 我的问题是如何在父表中插入记录并自动将这些记录插入到子表中
  • 在父表中,您没有 orderid 和 ordernumber。你将如何得到这些?请解释一下。
  • 我上面写过,假设我在子表中放了一个父表的外键列,也就是说,我在子表中设置了一个外键列,然而,当我在父表中插入记录时,我检查子表,看看那些插入父表的记录在子表中是否可用,我没有,另外,我设置了ON UPDATE CASCADE ON DELETE级联
  • 你不会的。它不是这样工作的。此外键仅禁止您将任何 PersonId 插入 Orders 表中,这在 Persons 表中不可用。没有其他的。它不会自动将任何数据插入到子表中。如果要同时在两个表中插入数据,则需要在事务上下文中执行两个插入语句,但首先在父表中。
  • @chu3la “我的问题是如何在父表中插入记录并自动将这些记录插入到子表中”不,您的问题帖子对此一无所知。 PS 通过编辑而不是 cmets 进行澄清。 PS 基本问题是常见问题。在考虑发布之前,请阅读手册和谷歌任何错误消息以及您的问题/问题/目标的许多清晰、简洁和精确的措辞,带有和不带有您的特定名称/字符串/数字、“site:stackoverflow.com”和标签;阅读许多答案。反映你的研究。请参阅How to AskHelp center 和投票箭头鼠标悬停文本。
猜你喜欢
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
相关资源
最近更新 更多