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

SQL主键约束问题求助:创建Employee表时触发检查约束错误

问题解决:创建Employee表时的CHECK约束错误

错误解析

报错信息翻译:

错误代码:3813。列检查约束'employee_chk_1'引用了其他列。

问题根源是你SQL语句里用了中文单引号(‘’),MySQL会将这种引号内的内容识别为列名或标识符,导致检查约束被误判为引用其他列,从而触发该错误。另外,MySQL 8.0之前的版本对CHECK约束支持不完善,即便语法正确也可能不生效。

修正方案

方案1:替换为英文单引号(保留CHECK约束)

将所有中文单引号换成英文单引号即可,MySQL 8.0+版本能正常识别:

CREATE TABLE EMPLOYEE
(
    EmpID      int(4),
    FName      varchar(20),
    LName      varchar(20),
    EmpSex     char(2) CHECK (EmpSex IN ('M', 'F')),
    EmpDoB     date,
    M_S        char(1) CHECK (M_S IN ('S', 'M', 'W', 'D')),
    EmpPhoneNo integer(11),
    ManagerID  int(4),

    PRIMARY KEY (EmpID),
    FOREIGN KEY (ManagerID) REFERENCES EMPLOYEE(EmpID)
);

方案2:使用ENUM类型(更推荐)

对于性别、婚姻状态这类固定枚举值的字段,ENUM类型比CHECK约束更贴合场景,存储和查询效率更高,且所有MySQL版本都支持:

CREATE TABLE EMPLOYEE
(
    EmpID      int(4),
    FName      varchar(20),
    LName      varchar(20),
    EmpSex     ENUM('M', 'F'),
    EmpDoB     date,
    M_S        ENUM('S', 'M', 'W', 'D'),
    EmpPhoneNo integer(11),
    ManagerID  int(4),

    PRIMARY KEY (EmpID),
    FOREIGN KEY (ManagerID) REFERENCES EMPLOYEE(EmpID)
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:45:14