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

创建含CHECK约束的Tour表时遇SQL错误:提示需符号名/保留字需反引号

问题分析与解决方案

我来帮你搞定这个创建表时的报错问题!你遇到的错误其实是语法结构问题引发的误导性提示,咱们一步步拆解清楚:

1. CHECK约束的核心语法错误

MySQL里的CHECK约束必须用括号包裹校验条件,你写的CHECK Cost BETWEEN 1500 and 2500缺少了括号,这会让SQL解析器误判语法逻辑,进而抛出类似“保留关键字”的错误提示——本质是解析失败后的误导,并非Cost是保留关键字。

2. 隐藏的Decimal精度不匹配问题

你定义的Cost decimal(4,2)精度不够:decimal(4,2)表示总共有4位数字(其中2位是小数),最大值只能存99.99,但你设置的默认值是2000.00,这会直接导致默认值无法存入,后续执行也会报错。需要把精度调整为decimal(6,2)(总6位,小数2位,可容纳到9999.99)才能适配你的默认值。

修正后的完整SQL语句

CREATE TABLE Tour (
    Tour_ID int AUTO_INCREMENT,
    Tour_Title VARCHAR(15) NOT NULL,
    Cost decimal(6,2) DEFAULT 2000.00, -- 修正精度,去掉默认值的引号(数值类型无需字符串包裹)
    CONSTRAINT tour_pk PRIMARY KEY (Tour_ID),
    CONSTRAINT Ck_cost CHECK (Cost BETWEEN 1500 AND 2500) -- 给CHECK条件添加括号
);

补充说明:

  • 默认值2000.00不需要单引号包裹,直接写数值是更规范的写法;
  • 如果你使用的MySQL版本低于8.0.16,CHECK约束会被数据库忽略(不会报错但不生效),这种情况下建议用触发器来实现金额范围的校验逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:57:21