明天的测试,我们被告知命名我们的约束 我知道在使用ALTER TABLE时可以创建约束 但是,在CREATE TABLE时可以为非空约束添加名称吗?
f.e。
CREATE TABLE test (
test1 VARCHAR
CONSTRAINT nn_test1 NOT NULL (test1)
)
尝试运行此查询时出错。我写错了吗?
我得到的错误是
ERROR: syntax error at or near "NOT" LINE 3: CONSTRAINT nn_test1 NOT NULL (test1)) ^ SQL state: 42601 Character: 56
答案 0 :(得分:3)
您有两个选项来定义命名非空约束:
内联列:
CREATE TABLE test
(
test1 VARCHAR CONSTRAINT nn_test1 NOT NULL,
test2 integer --<< no comma because it's the last column
);
或在列的末尾作为外线约束。但是你需要一个检查约束:
CREATE TABLE test
(
test1 VARCHAR,
test2 integer, --<< comma required after the last column
constraint nn_test1 check (test1 is not null)
);
答案 1 :(得分:0)
由于您没有使用SQL Server ,因此无关紧要
首先,总是为 < / p>
VARCHAR
指定长度。不这样做(在SQL Server变量或参数中)可能会导致字符串长度恰好是一个字符 - 通常不你想要的。
然后,您只需指定NOT NULL
- 无需重复列名称(实际上这是错误) - 如果您使用列指定CONSTRAINT
“内联”定义(这是完全合法的,在我看来是这样做的首选方式)。
试试这段代码:
CREATE TABLE test
(
test1 VARCHAR(50)
CONSTRAINT nn_test1 NOT NULL
)
至少这是在T-SQL / SQL Server中有效的CREATE TABLE
语句 - 不确定PostgreSQL(不太了解它,现在没有它可以立即测试)。
答案 2 :(得分:0)
I,a_horse_with_no_name,两种语法:
约束nn_test1检查(test1不为空) 和 test1 VARCHAR CONSTRAINT nn_test1 NOT NULL
是等效的吗?性能正确。 因为在第一种情况下,SQL Server异常返回名称 nn_test ,所以系统确切知道错误。