Oracle建表约束顺序疑问:为何接受DEFAULT 1 NOT NULL却拒绝NOT NULL DEFAULT 1?
Oracle列定义中DEFAULT与NOT NULL的顺序问题
Oracle的SQL语法对列定义里的元素顺序有明确要求,这就是你遇到两种建表语句执行结果不同的核心原因:
- 官方规定的列定义顺序为:
列名 数据类型 [DEFAULT 默认值] [列约束] DEFAULT属于列的属性设置项,而NOT NULL是列级约束,所以必须将DEFAULT放在NOT NULL之前。
你能成功执行的语句CREATE TABLE t1 (id NUMBER DEFAULT 1 NOT NULL)完全符合这个顺序,而CREATE TABLE t1 (id NUMBER NOT NULL DEFAULT 1)把列约束前置到DEFAULT之前,违反了Oracle的语法规则,因此会执行失败。
补充说明:对于UNIQUE、PRIMARY KEY这类约束,如果作为列级约束使用,同样需要放在DEFAULT之后;如果是表级约束,则在所有列定义之后单独声明,不受此顺序限制。
内容的提问来源于stack exchange,提问作者LiMaLi
相关产品推荐
相关产品推荐

