Postgresql:表约束和列约束的区别

Joj*_*Bop 6 postgresql constraints

pgsql 8.4 文档摘录:“[...] 列约束只是在约束仅影响一列时使用的符号方便。” 那么这个有效的sql如何?



DROP TABLE IF EXISTS test;
CREATE TABLE test(
id integer CONSTRAINT PK_test PRIMARY KEY  CONSTRAINT nenull NOT NULL CHECK (id3>=id2) 
--the check constraint affects two columns none of which is id
,id2 integer 
, id3 integer
);
Run Code Online (Sandbox Code Playgroud)

摘录似乎只适用于 PRIMARY KEY 和 FOREIGN KEY 约束,它们应该只影响与 Catcall 声明的约束在同一行上的列

Mik*_*ll' 6

文档中的其他地方。. .

我们说前两个约束是列约束,而第三个约束是表约束,因为它与任何一个列定义分开编写。列约束也可以写成表约束,反之则不一定,因为列约束应该引用它所附加的列。(PostgreSQL 不强制执行该规则,但如果您希望您的表定义与其他数据库系统一起使用,您应该遵循它。)


小智 5

1)列级约束是在创建表时声明的,但表级约束是在创建表后创建的。

2)NOT NULL不能在表级别创建约束,因为所有约束将为该特定列提供逻辑视图,但NOT NULL会分配给表本身的结构..这就是为什么我们可以NOT NULL在描述表时看到约束,没有其他约束看到了。

3)复合主键必须在表级声明。

4) 所有约束都可以在表级别创建,但NOT NULL不允许在表级别创建。