【问题标题】:How can i insert value into a table with foreign key?如何将值插入带有外键的表中?
【发布时间】:2021-06-03 03:06:05
【问题描述】:

我有this 表格方案

由于错误 1452(无法添加或更新子行),我根本无法将任何值插入第二个或 3d 表。 我怎样才能插入东西? (不使用 SET FOREIGN_KEY_CHECKS=0;)

【问题讨论】:

  • 我有这个表格方案提供完整的 CREATE TABLE 文本脚本。
  • 这是因为你的数据模型坏了。您不能有 2 个以这种方式相互引用的表:每个表上都有一个 FK 引用另一个上的 PK。这样的设计没有逻辑意义,而且正如您所发现的,没有办法将数据插入其中 - 因为每个表都需要在另一个表中存在数据,然后才能将数据插入其中
  • 有办法,我的老师告诉我这是可能的,但没有告诉我怎么做
  • 显示模型。也许可以对其进行改造以避免循环依赖

标签: mysql sql mysql-error-1452


【解决方案1】:

如果您有循环外键引用,则无法直接插入数据 - 由于外键违规,插入任何表都会失败,并且不支持每次查询插入多个表。

解决办法:插入第一个表,但将引用列设置为NULL,插入第二个表,更新第一个表。

例子:

CREATE TABLE test1 (t1_id INT PRIMARY KEY, t2_id INT);
CREATE TABLE test2 (t1_id INT, t2_id INT PRIMARY KEY);
ALTER TABLE test1 ADD FOREIGN KEY (t2_id) REFERENCES test2 (t2_id);
ALTER TABLE test2 ADD FOREIGN KEY (t1_id) REFERENCES test1 (t1_id);
INSERT INTO test1 VALUES (1,11);
无法添加或更新子行:外键约束失败(`db_262184466`.`test1`, CONSTRAINT `test1_ibfk_1` FOREIGN KEY (`t2_id`) REFERENCES `test2` (`t2_id`))
INSERT INTO test2 VALUES (1,11);
无法添加或更新子行:外键约束失败(`db_262184466`.`test2`, CONSTRAINT `test2_ibfk_1` FOREIGN KEY (`t1_id`) REFERENCES `test1` (`t1_id`))
INSERT INTO test1 VALUES (1,NULL);
INSERT INTO test2 VALUES (1,11);
UPDATE test1 SET t2_id = 11 WHERE t1_id = 1;
SELECT * FROM test1; 
SELECT * FROM test2;
t1_id | t2_id ----: | ----: 1 | 11 t1_id | t2_id ----: | ----: 1 | 11

db小提琴here

【讨论】:

  • 它仍然是一个非常糟糕的数据库设计,如果它旨在模拟任何现实世界的情况,它几乎肯定是不正确的。你的老师最好把时间花在设定现实世界的挑战上,而不是像这样毫无意义的理论挑战 - IMO!
  • @NickW 它仍然是一个非常糟糕的数据库设计 我同意这个说法。 如果它旨在模拟任何现实世界的情况。生活比最疯狂的幻想更加多样化......
猜你喜欢
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
相关资源
最近更新 更多