我想创建一个一次只能包含固定行数的表,例如只有一行:
create table test (
someId INT not null,
comment VARCHAR(4096) null,
check((select count(*) from test) < 2)
)
但是不允许给定的检查约束:
错误:检查约束中不允许聚合或子查询。
SQLState:ZZZZZ ErrorCode:7356
有替代方法吗?
答案 0 :(得分:1)
您似乎想要创建一个保证最多只有一行的表。这似乎是一张桌子的不寻常用途。通常情况下,我会推荐一个触发器。
因为你只想要一行,你可以使用这个hack:
create table test (
someId INT not null,
comment VARCHAR(4096) null,
guarantee_one_row int default 0,
constraint test_only_one_row unique(guarantee_one_row)
);
它添加一个具有默认值的列,然后在其上定义一个唯一约束。
我应该指出你也可以用计算列做到这一点:
create table test (
someId INT not null,
comment VARCHAR(4096) null,
guarantee_one_row as ('one row') materialized,
constraint test_only_one_row unique(guarantee_one_row)
);