我们可以为一个外键引用两个不同的表吗?

时间:2015-05-29 01:52:45

标签: mysql foreign-keys mysqladministrator

我有这些表格:

table1
-----------------------
tb1_id
name
other stuff

table2
-------------------------------
tb2_Id
other stuff

table 3
--------------------------------
id
ref Id    ->either tb2_id or tb1_id

可以通过以下代码实现吗?

CREATE TABLE `eloan`.`table3` (
  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `refId` VARCHAR(45) NOT NULL DEFAULT '',
  PRIMARY KEY(`id`),
  CONSTRAINT `refId` FOREIGN KEY `refId` (`refId`, `refId`)
    REFERENCES `table2` (`tb2_id`, `tb1_id`)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT
)
ENGINE = InnoDB;

此代码返回了一个"重复的redid"错误。

1 个答案:

答案 0 :(得分:1)

没有。那是不可能的。

如果您只想使用单个refId列,则无法声明/定义外键约束以引用多个表。

您可以在三个表上定义BEFORE INSERT,BEFORE UPDATE和BEFORE DELETE触发器,以执行一些完整性检查,并使触发器抛出异常/错误以防止某些更改。

显然,您可以在table3中定义两个单独的列,一个可以是table1的外键引用,另一个可以引用table2。您可以定义外键约束。

您可以允许两个列都为NULL。

如果要仅强制执行一个或另一个要填充的列(至少有一个列必须为NULL而另一个列必须为NOT NULL),则可以在BEFORE INSERT中强制执行该操作。 BEFORE UPDATE触发。