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

MySQL创建task表的SQL语句咨询:含指定字段与默认值要求

嘿,我来帮你搞定这个task表的创建语句!先给你完整的可运行SQL,然后再逐个解释每个字段的处理细节:

CREATE TABLE task (
    task_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    title VARCHAR(50) NOT NULL,
    `begin` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `end` DATETIME NULL DEFAULT NULL,
    status ENUM('not started', 'in progress', 'done') DEFAULT 'not started',
    PRIMARY KEY (task_id)
);

逐个字段说明:

  • task_id:你选的SMALLINT UNSIGNED非常合适,既能节省存储空间,又能满足大部分任务数量的需求;加上AUTO_INCREMENT会自动生成唯一的ID值,最后设置成主键PRIMARY KEY (task_id),确保每个任务的ID唯一且不可重复。
  • title:VARCHAR(50) NOT NULL完全符合必填的要求,限制长度可以避免存储过长的标题,同时NOT NULL强制这个字段必须填写。
  • begin:用DATETIME类型可以同时存储日期和时间,DEFAULT CURRENT_TIMESTAMP会在你创建任务时不指定这个字段值的情况下,自动填充当前的系统时间,完美满足“可选且默认当前日期”的需求;如果只需要日期不需要时间,换成DATE类型加DEFAULT CURDATE()也可以。另外注意,begin是MySQL的保留关键字,作为字段名必须用反引号(`)包裹,否则会报错。
  • end:同样用DATETIME类型,设置成NULL DEFAULT NULL,意味着创建任务时可以不填这个字段,默认就是空值,等任务结束后再更新这个字段即可。这里的end也是保留关键字,所以同样需要反引号包裹。
  • status:你猜对了!用ENUM类型最适合这种固定可选值的场景,把允许的三个状态列进去后,数据库会自动限制只能输入这三个值,避免出现非法的状态值;DEFAULT 'not started'则保证创建任务时不指定状态的话,自动使用默认的“未开始”状态。

额外小提示:

  • 如果你的MySQL版本低于5.6,CURRENT_TIMESTAMP不能作为DATETIME的默认值,这时候可以换成TIMESTAMP类型,或者手动在插入时指定默认值。不过现在大部分环境都是5.6+版本,这个问题基本不用考虑。
  • ENUM类型的字符串是严格匹配的,比如输入Not Started(首字母大写)会报错,所以插入或更新时要和定义的字符串完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:37:32