mysql timestamp类型字段 自动更新为当前时间

需求描述:现需要数据库中一个字段来记录当前记录的最近修改时间或者创建时间,并自动更新维护。

timestamp类型的使用示例如下:

创建一个数据库,并指定 uptime为 timestamp类型

create  table test(
	tid int primary key auto_increment,
	uptime timestamp,
	hobby varchar(20)
);

插入一条数据

insert into test (tid,uptime,hobby) values(null,null,null);

查看数据库数据
在这里插入图片描述
我们看到数据插入成功,但是uptime字段显示为 null

我们再插入一条数据,如下:

insert into test (tid,uptime,hobby) values(null,current_timestamp,null);

查看数据库数据如下:
在这里插入图片描述
我们看到第二条数据插入成功了,并且时间为 当前插入的时间

下面我们更新一下字段看 时间是否会自动维护

update test set hobby='篮球'  where tid < 4;

我们看效果
在这里插入图片描述
时间并没有自动更新,还是我们插入的时间,并不是修改的时间。

我们首先手动更新一下时间:

update test set uptime = current_timestamp where tid < 10;

效果如图:
在这里插入图片描述

当我们设置timestamp类型为current_timestamp时,系统会自动获取当前修改或者创建时间,但是不糊自动维护。

那么问题来了?

如何让timestamp类型自动维护

  1. 我们重新传建一个是数据库
create table test2(
	pid int primary key  auto_increment,
	uptime timestamp null default current_timestamp on update current_timestamp,
	hobby varchar(30)
);

我们先看一下创建后的表结构:

show create table test2;

在这里插入图片描述

我们注意一下 uptime 字段,可以为空,默认时间为current_timestampon update curret_timestamp设置可以使记录发生改变的时候时间自动改变。

插入一条没有默认时间的数据数据

insert into test2 values(null,null,null);

查看表结构
在这里插入图片描述
我们可以看到当我们没有设置默认值的时候时间默认为null

我们再插入一条带默认时间的数据

insert into test2 values(null,current_timestamp,null);

如图:
在这里插入图片描述
我们可以看到 有两条数据,一条有默认时间一条没有。

下面我们修改一下 两条记录,看时间是否会自动维护

update test2 set hobby='篮球' where pid < 5;

大功告成

在这里插入图片描述

我们可以看到时间字段 在 自动维护,之前默认值为空的时候,在修改记录之后也会自动将时间改为 修改时间。

最后的完善

我们已经可以做到 时间自动维护了,还有一个 小缺点,就是在刚开始插入时间时,我们没有传入默认时间的话,初始值为null,只有我们修改这条记录的时候他才会自动记录时间。

完善方案: 在创建数据库的时候设置 uptime字段为 not null

create table test3(pid int primary key auto_increment,uptime timestamp not null default current_timestamp on update current_timestamp);

表结构如下:
在这里插入图片描述

这样我们就会在创建该记录时候强制传入一个时间,并在修改的时候自动维护。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值