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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:54:04