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
相关产品推荐
相关产品推荐

