【问题标题】:SQL - Linking two tables with foreign keysSQL - 用外键链接两个表
【发布时间】:2021-10-08 14:44:39
【问题描述】:

我需要那个;

现在,我们有两张桌子。我想为每个表设置外键。但在这一点上,有这样的事情。在两个外键上,它将链接到对面的表。也就是说,A表的foreign1列会连接到B表的foreign1_ref列,B表的foreign2列会连接到A表的foreign2_ref列。

示例 SQL 表:

Table: A
+--+--------+------------+
|ID|foreign1|foreign2_ref|
+--+--------+------------+

Table: B
+--+--------+------------+
|ID|foreign2|foreign1_ref|
+--+--------+------------+

我怎样才能做到这一点? 谢谢。

【问题讨论】:

  • 让我们从“为什么需要这个”开始?您要完成什么不能仅在单个表中使用外键?这仅在至少一个外键可以为空时才有效
  • 你有什么问题?正如@mk1x86 所说,如果其中一个 FK 可以为空,它应该可以正常工作。为避免先有鸡还是先有蛋的问题,当您在两个表中有相互引用的行时,您必须使用空 FK 创建第一个,然后创建引用它的第二个,然后您可以更新第一个 FK。

标签: mysql foreign-keys


【解决方案1】:
CREATE TABLE `a` (
  `id` int unsigned NOT NULL,
  `foreign1` int unsigned NOT NULL,
  `foreign2_ref` int unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_foreign1_b1_idx` (`foreign1`),
  KEY `foreign2` (`foreign2_ref`),
  CONSTRAINT `fk_foreign1_b1` FOREIGN KEY (`foreign1`) REFERENCES `b` (`foreign1_ref`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

CREATE TABLE `b` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `foreign2` int unsigned NOT NULL,
  `foreign1_ref` int unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `foreign1` (`foreign1_ref`),
  KEY `fk_foreign2_a1_idx` (`foreign2`),
  CONSTRAINT `fk_foreign2_a1` FOREIGN KEY (`foreign2`) REFERENCES `a` (`foreign2_ref`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    相关资源
    最近更新 更多