原创 MySql 之 TIMESTAMP(时间戳)自动记录数据的更新时间

在设计数据库时,必不可少的要记录创建时间,大多数情况下我们也需要记录数据的最新更新时间,万一遇到个漏洞什么的我们也可以通过更新的时间定位BUG的问题。在MySql中存在着TIMESTAMP(时间戳)这么一个好东西,可以自动的记录下数据的更新时间,妈妈再也不用担心我的update_time问题了

TIMESTAMP存在着CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP两个属性

CURRENT_TIMESTAMP

当要向数据库执行insert操作时,如果有个timestamp字段属性设为 CURRENT_TIMESTAMP,则无论这个字段有没有set值都插入当前系统时间

ON UPDATE CURRENT_TIMESTAMP

当执行update操作(随便哪个字段)时,并且字段有ON UPDATE CURRENT_TIMESTAMP属性。则字段无论值有没有变化,它的值也会跟着更新为当前UPDATE操作时的时间。

通过组合,我们在使用时可以这样玩:

在创建新记录和修改现有记录的时候都对这个数据列刷新,如下:

CREATE TABLE `user` (
`id`  bigint(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
`name`  varchar(25) NOT NULL ,
`password`  varchar(64) NOT NULL ,
`create_time`  bigint(20) NOT NULL ,
`update_time`  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
;

在创建新记录的时候把这个 字段设置为当前时间,但以后修改时,不再刷新它,如下:

CREATE TABLE `user` (
`id`  bigint(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
`name`  varchar(25) NOT NULL ,
`password`  varchar(64) NOT NULL ,
`create_time`  bigint(20) NOT NULL ,
`update_time`  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
;

在创建新记录的时候把这个字段设置为0, 以后修改时刷新它,如下:

CREATE TABLE `user` (
`id`  bigint(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
`name`  varchar(25) NOT NULL ,
`password`  varchar(64) NOT NULL ,
`create_time`  bigint(20) NOT NULL ,
`update_time`  timestamp NOT NULL  ON UPDATE CURRENT_TIMESTAMP ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
;

有了这么一个好东西,我们在创建表时,createtime 就存unix时间戳,updatetime设置为timestamp,永远不用管update_time这个字段了

本文为 Laysonx 原创 文章,转载无需和我联系,但请注明来自 李鑫的杂货铺 或 李鑫博客