MySQL中的条件外键[重复]

dpiehjr4  于 2023-04-29  发布在  Mysql
关注(0)|答案(1)|浏览(129)

此问题已在此处有答案

MySQL - Conditional Foreign Key Constraints(2个答案)
6天前关闭。
我有一个名为batch的表,其中包含entityId和entityType。EntityId可以引用基于entityType中提到的CHAR枚举的多个表。
有没有一种方法可以在MySQL中实现与具有这种关联的父表的链接。

soat7uwm

soat7uwm1#

不能,不能有条件外键约束。但是,您可以有三个单独的,可以在一个排他性的方式工作。例如:

create table s (id int primary key not null);
create table m (id int primary key not null);
create table l (id int primary key not null);

create table batch (
  size enum('S', 'M', 'L'),
  s_id int references s (id),
  m_id int references m (id),
  l_id int references l (id),
  check (size = 'S' and s_id is not null and m_id is null and l_id is null
      or size = 'M' and s_id is null and m_id is not null and l_id is null
      or size = 'L' and s_id is null and m_id is null and l_id is not null)
);

check约束确保其中一个且只有一个在任何给定时间不为null,并且它必须对应于size列中的值。

注意CHECK约束只在MySQL 8开始才被接受。0.17(或类似版本)。在此之前,它们被读取和存储,但被默默地忽略。

相关问题