我有这些表格:
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"错误。
答案 0 :(得分:1)
没有。那是不可能的。
如果您只想使用单个refId
列,则无法声明/定义外键约束以引用多个表。
您可以在三个表上定义BEFORE INSERT,BEFORE UPDATE和BEFORE DELETE触发器,以执行一些完整性检查,并使触发器抛出异常/错误以防止某些更改。
显然,您可以在table3
中定义两个单独的列,一个可以是table1
的外键引用,另一个可以引用table2
。您可以定义外键约束。
您可以允许两个列都为NULL。
如果要仅强制执行一个或另一个要填充的列(至少有一个列必须为NULL而另一个列必须为NOT NULL),则可以在BEFORE INSERT
中强制执行该操作。 BEFORE UPDATE
触发。