You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:52:00