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

