MySQL自动设置create_time
Bingo 2018-02-22 15:19:48
M
y
S
Q
L
在数据库的每张表中,建议都有 create_time
和 update_time
字段,记录每条数据的创建时间和更新时间。这通常需要在服务端代码中,设置好时间后再插入数据库,并不优雅。
记录一下解决方案,由 MySQL
记录时间,这样就无需再手动给这两个参数赋值。
# timestamp
在数据库表中,create_time
和 update_time
都使用 timestamp
类型,并分别设定默认值。
字段 | 类型 | 默认值 |
---|---|---|
create_time | timestamp | CURRENT_TIMESTAMP |
update_time | timestamp | NULL ON UPDATE CURRENT_TIMESTAMP |
CURRENT_TIMESTAMP
:在insert
数据时,mysql 会自动设置当前系统时间赋值给该属性字段。ON UPDATE CURRENT_TIMESTAMP
:在update
数据且成功更改时,mysql 会自动设置当前系统时间赋值给该属性字段。
# SQL的方式进行设置
# 创建表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(16) NOT NULL,
`password` char(60) NOT NULL,
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
这样创建出来的表,在插入/更新数据的时候,就不需要给 create_time
和 update_time
赋值了,MySQL 会自动进行设置保存。
如果原来的表已经存在,并且有数据了,则使用下面对表结构修改的 sql 语句。
# 修改表
# 写法一:
- 如果希望数据刚插入的时候,
create_time
有值,而update_time
为NULL
; - 下次数据更新时,
create_time
不变,update_time
更新,则使用:
ALTER TABLE `user`
ADD COLUMN create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
ADD COLUMN update_time timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP;
1
2
3
2
3
# 写法二:
- 如果希望数据刚插入的时候,
create_time
和update_time
都有值且相同; - 下次数据更新时,
create_time
不变,update_time
更新,则使用:
ALTER TABLE `user`
ADD COLUMN create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
ADD COLUMN update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER create_time;
1
2
3
2
3
# 数据库客户端进行设置
create_time
的设置如下:
update_time
的设置如下:
简单地说,就是把 create_time
和 update_time
都设置为 timestamp
类型,默认值设置为 CURRENT_TIMESTAMP
,最后 update_time
勾上 On update Current_Timestamp
即可实现该需求。