X-j*_*-jo 12 sql postgresql database-design postgresql-9.1
我有一张桌子,我只想要一个入口.因此,如果有人试图插入另一行,则只有在有人删除了以前存在的行之后才允许这样做.
如何为这样的表设置规则?
Erw*_*ter 23
一个UNIQUE约束允许多行与NULL值,因为有两个NULL值永远不会被视为是相同的.
类似的考虑适用于CHECK约束.它们允许表达式为(TRUE或者NULL不是FALSE).同样,NULL价值超过了支票.
要对此进行排除,必须定义该列NOT NULL.或者自己PRIMARY KEY定义PK列以来NOT NULL.细节:
另外,只需使用boolean:
CREATE TABLE onerow (
onerow_id bool PRIMARY KEY DEFAULT TRUE
, data text
, CONSTRAINT onerow_uni CHECK (onerow_id)
);
Run Code Online (Sandbox Code Playgroud)
该CHECK约束可以是一个简单boolean列.只TRUE允许.
Ric*_*ell 10
向表中添加新列,然后在此列上添加检查约束和唯一性约束.例如:
CREATE TABLE logging (
LogId integer UNIQUE default(1),
MyData text,
OtherStuff numeric,
Constraint CHK_Logging_singlerow CHECK (LogId = 1)
);
Run Code Online (Sandbox Code Playgroud)
现在,您只能拥有一行LogId = 1.如果您尝试添加新行,它将破坏唯一性或检查约束.
(我可能搞砸了语法,但是它给你一个想法?)
小智 5
我想这里不需要额外的字段。只是常量的唯一索引:
CREATE UNIQUE INDEX ux_onerow ON onerow ((0));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8202 次 |
| 最近记录: |