如何在MySQL表中创建列并设置约束仅允许输入指定字符
问题原因
- 语法错误:不存在「列定义后直接加
IN(值列表)」的写法,该语法不被SQL标准和主流数据库支持。 - 建表语句结构不完整:你编写的语句最后缺少表定义闭合的右括号
)。
解决方案
方案1:使用ENUM类型(推荐,适配绝大多数MySQL版本)
ENUM是MySQL原生支持的枚举类型,天然限制输入值只能是指定列表中的选项,写法如下:
CREATE TABLE IF NOT EXISTS `UNIVERSITY`.`GRADE REPORT` ( `Student_number` INT, `Section_id` INT, `Grade` ENUM('A', 'B', 'C', 'D', 'E', 'F') ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
该写法在所有支持ENUM的MySQL版本中都可生效,输入值不在指定枚举列表时会直接报错。
方案2:使用CHECK约束(适配MySQL 8.0.16及以上版本)
如果你不想使用ENUM类型,且使用的MySQL版本在8.0.16及以上,可以用CHECK约束实现:
CREATE TABLE IF NOT EXISTS `UNIVERSITY`.`GRADE REPORT` ( `Student_number` INT, `Section_id` INT, `Grade` CHAR, CHECK (`Grade` IN ('A', 'B', 'C', 'D', 'E', 'F')) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
注意事项
- 若使用MySQL 8.0.16之前的版本,CHECK约束会被数据库静默忽略,不会生效,优先选择ENUM方案。
- ENUM类型的值大小写敏感,若需要支持小写等级,需要将对应小写值也加入枚举列表中。
内容的提问来源于stack exchange,提问作者MAGED AL-WARD
相关产品推荐
相关产品推荐

