创建一个数据库,并指定 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,current_timestamp,null);
查看数据库数据如下:
我们看到第二条数据插入成功了,并且时间为
当前插入的时间
下面我们更新一下字段看 时间是否会自动维护
update test set hobby='篮球' where tid < 4;
我们看效果
时间并没有自动更新,还是我们插入的时间,并不是修改的时间。
我们首先手动更新一下时间:
update test set uptime = current_timestamp where tid < 10;
效果如图:
当我们设置timestamp类型为
current_timestamp
时,系统会自动获取当前修改或者创建时间,但是不糊自动维护。
那么问题来了?
如何让timestamp类型自动维护
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_timestamp
,on update curret_timestamp
设置可以使记录发生改变的时候时间自动改变。
insert into test2 values(null,null);
查看表结构
我们可以看到当我们
没有设置默认值的时候时间默认为null
insert into test2 values(null,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);
表结构如下:
这样我们就会在创建该记录时候强制传入一个时间,并在修改的时候自动维护。