MySQL TIMESTAMP(3)的默认值
MySQL中的TIMESTAMP数据类型是一个常用的日期和时间类型,它可以精确到秒级或毫秒级,具体取决于使用的子秒数。当声明TIMESTAMP字段时,可以使用括号来指定子秒精度。例如,TIMESTAMP(3)表示精确到毫秒级的时间戳。
在使用TIMESTAMP字段时,有时候我们可能不会为其值指定一个具体的日期或时间,而希望在插入一条新记录时,该字段的值能自动使用MySQL的默认值。那么,如何为TIMESTAMP字段设置默认值呢?
阅读更多:MySQL 教程
默认值
在MySQL中,可以使用DEFAULT关键字为TIMESTAMP字段设置默认值。该关键字允许我们为字段指定固定的默认值,以确保一个合适的值在我们没有在INSERT语句中明确指定时被插入。
例如,我们可以创建一个名为orders的表,其中包含created_at和updated_at字段,这两个字段的数据类型均为TIMESTAMP(3):
CREATE TABLE orders (
id INT(11) NOT NULL AUTO_INCREMENT,
total DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
updated_at TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
在上面的CREATE TABLE语句中,我们为创建时间和更新时间字段分别指定了一个默认值。对于created_at字段,我们使用了CURRENT_TIMESTAMP(3)作为其默认值。这意味着如果我们没有为该字段指定一个具体的值,MySQL会自动在插入记录时使用当前的日期和时间作为其值。
同样地,对于updated_at字段,我们使用了ON UPDATE CURRENT_TIMESTAMP(3)子句,这表示当记录被更新时,MySQL会自动将该字段的值更新为当前的日期和时间。
让我们向orders表中插入一条新记录,查看默认值是否生效:
INSERT INTO orders (total) VALUES (100.00);
这会将total字段设置为100.00,而created_at和updated_at字段将默认使用当前的日期和时间。我们可以查询新记录的created_at和updated_at字段,以确认它们是否按预期工作:
SELECT created_at, updated_at FROM orders WHERE id = 1;
结果应该类似于:
+-------------------------+-------------------------+
| created_at | updated_at |
+-------------------------+-------------------------+
| 2021-07-25 13:23:08.425 | 2021-07-25 13:23:08.425 |
+-------------------------+-------------------------+
可以看到,MySQL成功为这两个TIMESTAMP字段自动生成了一个默认值。
自定义默认值
除了使用MySQL内置的默认值函数之外,我们还可以使用具体的日期时间作为TIMESTAMP字段的默认值。
例如,我们可以为orders表中的updated_at字段设置一个将来的时间,以便在更新记录时使用该时间:
ALTER TABLE orders MODIFY updated_at TIMESTAMP(3) NOT NULL DEFAULT '2030-01-01 00:00:00.000';
这将updated_at字段的默认值设置为2030年1月1日00:00:00.000,这意味着如果我们更新orders表中的记录,其值将自动设置为2030年1月1日。
清除默认值
如果我们想删除TIMESTAMP字段的默认值,可以使用ALTER TABLE语句:
ALTER TABLE orders ALTER COLUMN created_at DROP DEFAULT;
这将删除created_at字段的默认值,当我们插入一条新记录时,created_at字段将不再自动填充。
总结
在MySQL中,使用DEFAULT关键字可以为TIMESTAMP字段设置默认值,可以使用内置的日期时间函数、具体的日期时间或NULL作为默认值。我们还可以随时通过ALTER TABLE语句更改TIMESTAMP字段的默认值,或使用DROP DEFAULT选项来清除默认值。设置TIMESTAMP字段的默认值有助于确保所插入的记录始终包含正确的日期和时间,并简化INSERT语句的编写。
极客教程