MySQL:实现对数据入库时间和更新时间的管理(timestamp)

MySQL:实现对数据入库时间和更新时间的管理(timestamp)


一. 需求

    1、在数据表中,要记录每条数据是什么时候创建的;
    2、在数据库中,要记录每条数据是什么时候修改的;

二. 实现详解:timestamp

    MySQL常用的版本,包括MySQL 5.5/5.6/5.7三个大版本和N个小版本。 在上述三个大版本中,默认时间戳(Timestamp)类型的取值范围为’1970-01-01 00:00:01’ UTC 至’2038-01-19 03:14:07’ UTC。

    在MySQL 5.6.4及之后版本,可以将时间戳类型数据最高精确微秒(百万分之一秒),数据类型定义为timestamp(N),N取值范围为0-6,默认为0,如需要精确到毫秒则设置为Timestamp(3),如需要精确到微秒则设置为timestamp(6),数据精度提高的代价是其内部存储空间的变大,但仍未改变时间戳类型的最小和最大取值范围。

    时间戳列可以有四种组合定义,其含义分别为:
       1、当字段定义为timestamp,表示该字段在插入和更新时都不会自动设置为当前时间。
       2、当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP,表示该字段仅在插入且未指定值时被赋予当前时间,再更新时且未指定值时不做修改。【适合入库字段】
       3、当字段定义为timestamp ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入且未指定值时被赋值为"0000-00-00 00:00:00",在更新且未指定值时更新为当前时间。【适合更新字段】
       4、当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入或更新时未指定值,则被赋值为当前时间。

    解释:CURRENT_TIMESTAMP表示使用CURRENT_TIMESTAMP()函数来获取当前时间,类似于NOW()函数。

    注意:当MySQL参数time_zone=system时,查询timestamp字段会调用系统时区做时区转换,而由于系统时区存在全局锁问题,在多并发大数据量访问时会导致线程上下文频繁切换,CPU使用率暴涨,系统响应变慢设置假死。所以建议将time_zone参数设置为system外的值,如中国地区服务器设置为’+8:00’。


三. 实现样例

drop table if exists table_timestamp;
create table table_timestamp
(
   message_pk          bigint not null auto_increment,

   message_content     varchar(99),

   /* 创建时间不可为空*/
   CreateTime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' ,
   
   /* 更新时间默认为空*/
   UpdateTime timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间' ,

   primary key (message_pk)
);

insert into table_timestamp(message_content) values('示例-插入');
select * from table_timestamp;

update table_timestamp set message_content='示例-插入-更新' where message_pk=1;
select * from table_timestamp;

MySQL:实现对数据入库时间和更新时间的管理(timestamp)_第1张图片
MySQL:实现对数据入库时间和更新时间的管理(timestamp)_第2张图片
MySQL:实现对数据入库时间和更新时间的管理(timestamp)_第3张图片

参考:https://blog.csdn.net/fsp88927/article/details/80662369

你可能感兴趣的:(数据库之关系型数据库)