如何在 CREATE TABLE 查询中命名 NOT NULL 约束

she*_*tka 4 sql postgresql constraints

对于明天的测试,我们被告知要命名我们的约束,我知道当您使用 ALTER TABLE 时可以创建一个约束,但是您可以在创建 TABLE 时为非空约束添加一个名称吗?

CREATE TABLE test (
    test1 VARCHAR 
    CONSTRAINT nn_test1 NOT NULL (test1)
)
Run Code Online (Sandbox Code Playgroud)

尝试运行此查询时出现错误。我写错了吗?

我得到的错误是

ERROR:  syntax error at or near "NOT"   
LINE 3: CONSTRAINT nn_test1 NOT NULL (test1))  
                            ^
SQL state: 42601  
Character: 56
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 6

您有两个选项可以定义命名的非空约束:

与列内联:

CREATE TABLE test 
(
   test1 VARCHAR CONSTRAINT nn_test1 NOT NULL, 
   test2 integer --<< no comma because it's the last column
);
Run Code Online (Sandbox Code Playgroud)

或者在列的末尾作为外部约束。但是你需要一个检查约束:

CREATE TABLE test 
(
   test1 VARCHAR, 
   test2 integer, --<< comma required after the last column
   constraint nn_test1 check (test1 is not null)
);
Run Code Online (Sandbox Code Playgroud)