MySQL的自动填充 create_time 和 update_time 字段有2种常见方式:
- 使用触发器自动填充
可以在创建表的时候编写触发器来自动生成时间,以下是示例代码:
CREATE TRIGGER `trg_users_created_at` BEFORE INSERT
ON `users` FOR EACH ROW
SET NEW.created_at = NOW(), NEW.updated_at = NOW();
CREATE TRIGGER `trg_users_updated_at` BEFORE UPDATE
ON `users` FOR EACH ROW
SET NEW.updated_at = NOW();
以上代码在新增数据和更新数据时会自动填充 created_at 和 updated_at 字段,其中 created_at 在 INSERT 时生效,在 UPDATE 时生成值会被更新,而 updated_at 在 INSERT 和 UPDATE 时都会生效。
- 使用 TIMESTAMP 默认值
在创建数据表的时候,直接使用 TIMESTAMP 数据类型并设置默认值为 CURRENT_TIMESTAMP,如下示例:
CREATE TABLE `users` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT "",
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
以上代码直接给 create_time 和 update_time 设定了默认值为 CURRENT_TIMESTAMP,INSERT 和 UPDATE 时会自动更新时间字段。
当使用 TIMESTAMP 类型来记录时间因为有一定的误差和不同数据库的时区问题,所以如果对时间精度要求比较高或是对时间要求非常严格的业务需要自己手动维护时间。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL自动填充create_time和update_time的两种方式 - Python技术站