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

报错‘constraint specification not allowed here’:命名与匿名CHECK约束区别咨询

SQL约束报错及两种Quantity字段定义的区别

报错背景

执行创建Bill表的SQL语句时,触发错误提示 constraint specification not allowed here(此处不允许约束规范),原SQL代码如下:

create table Bill (
BillNo  NUMBER PRIMARY KEY,
StoreName varchar2(20) constraint bill_sname_fk references Store(StoreName),
Shopperid NUMBER constraint bill_sis_fk references Shopper(ShopperId),
ArCode CHAR(5) constraint bill_acode_fk references Article(ArCode),
Amount NUMBER,
BillDate DATE,
Quantity NUMBER(4) DEFAULT 1 constraint bill q_ck check(Quantity>1)
);

注:原SQL中reference应为references,这也是一处语法问题

两种Quantity字段定义的核心区别

1. Quantity NUMBER(4) DEFAULT 1 constraint bill q_ck check(Quantity>1)

  • 意图为CHECK约束指定自定义名称,但写法存在语法错误:约束名bill q_ck包含空格,违反SQL标识符命名规则(标识符不允许直接带空格,部分数据库支持用双引号包裹带空格的名称,但不推荐),这正是触发报错的直接原因。
  • 若修正约束名(例如改为bill_q_ck),该语句会创建一个名为bill_q_ck的CHECK约束,后续可通过这个名称单独对约束进行修改、删除等操作,便于管理。

2. Quantity NUMBER(4) DEFAULT 1 check(Quantity>1)

  • 未给CHECK约束指定名称,属于隐式命名。数据库会自动为该约束生成一个系统默认名称(比如Oracle中会生成SYS_C00XXXXXX格式的名称)。
  • 后续管理该约束时,只能通过系统生成的默认名称操作,不如显式命名的约束直观,维护成本更高。

内容的提问来源于stack exchange,提问作者saurabh kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:15:21