我有一张桌子,我想要only one entry张.因此,如果有人试图插入另一行,只有在有人删除了之前存在的行之后,才应该允许插入另一行.
我该如何为这样的桌子设定规则?
我有一张桌子,我想要only one entry张.因此,如果有人试图插入另一行,只有在有人删除了之前存在的行之后,才应该允许插入另一行.
我该如何为这样的桌子设定规则?
UNIQUE
约束允许多行有NULL
个值,因为两个NULL
值永远不会被认为是相同的.
类似的考虑也适用于CHECK
个约束.它们允许表达式为TRUE
或NULL
(而不是FALSE
).同样,NULL
个值通过了判断.
为了排除这种可能性,将must列定义为NOT NULL
.或者将其设为PRIMARY KEY
,因为PK列是自动定义的NOT NULL
.细节:
此外,只需使用boolean
:
CREATE TABLE public.onerow (
onerow_id bool PRIMARY KEY DEFAULT TRUE
, data text
, CONSTRAINT onerow_uni CHECK (onerow_id)
);
对于boolean
列,CHECK
约束可能就这么简单.只允许TRUE
人.
您可能希望从public
(以及所有其他角色)中删除REVOKE
(或不是GRANT
)DELETE
和TRUNCATE
权限,以防止删除单行.比如:
REVOKE DELETE, TRUNCATE ON public.onerow FROM public;