MySQL中创建Horse表执行失败,如何编写符合约束的建表SQL语句?
MySQL Horse表创建实现
表字段规则与约束
- ID:取值范围0到65000的整数,自增,主键
- RegisteredName:最大长度15的可变长字符串,非NULL
- Breed:最大长度20的可变长字符串,取值只能为以下之一:Egyptian Arab、Holsteiner、Quarter Horse、Paint、Saddlebred
- Height:3位有效数字、1位小数的数值,需满足≥10.0且≤20.0
- BirthDate:日期类型,需≥2015年1月1日
初始错误建表代码
CREATE TABLE horse ( ID SMALLINT AUTO_INCREMENT PRIMARY KEY, RegisteredName VARCHAR(15) NOT NULL, Breed VARCHAR(20), CHECK (Breed="Egyptian Arab" "Holsteiner" "Quarter Horse" "Paint" "Saddlebred") Height DECIMAL(3,1) CHECK (Height=>10.0) CHECK (Height<=20.0), BirthDate DATE CHECK (BirthDate=>"Jan 1, 2015") );
修正后可正常执行的建表代码
CREATE TABLE Horse ( ID SMALLINT *UNSIGNED* AUTO_INCREMENT PRIMARY KEY, RegisteredName VARCHAR(15) NOT NULL, Breed VARCHAR(20) CHECK (Breed="Egyptian Arab" "Holsteiner" "Quarter Horse" "Paint" "Saddlebred")*,* Height DECIMAL(3,1) CHECK *(Height between 10.0 AND 20.0)*, BirthDate DATE CHECK *(BirthDate >='2015-01-01')* );
调整说明
- 第2行添加UNSIGNED关键字,保证ID取值范围符合0到65000的要求
- 第4行调整逗号位置,修复语法错误
- 第5行删除多余的CHECK语句,将格式错误的不等式改用BETWEEN改写,逻辑更简洁
- 第6行修正为MySQL支持的标准日期格式,避免日期解析错误
修正完成后即可在MySQL Workbench中成功执行代码,新表会自动添加到左侧边栏的对应schema中。
内容的提问来源于stack exchange,提问作者user16775217
相关产品推荐
相关产品推荐

