MySQL--时间戳属性1
==============================================================================
timestarmp列可以设置两个属性:
1、default current_timestamp 表示插入记录行时,如果未对该列指定值,则使用当前时间来为该字段赋值
2、on update current_timestamp 表示在更新记录时,如果为更新该事件戳列,使用当前时间来更新该字段
==============================================================================
如果在定义时间戳字段时列定义为:c1 timestamp default current_timestamp,那么c1列仅在插入且未指定值时会被赋值为当前时间,在更新且未指定更新值时该时间戳列不会发生值变化。
create table tb1002(id int primary key,c1 timestamp default current_timestamp); insert into tb1002(id) select 1 union select 2; update tb1002 set id=3 where id=1; select * from tb1002; +----+---------------------+ | id | c1 | +----+---------------------+ | 2 | 2016-07-29 23:53:51 | | 3 | 2016-07-29 23:53:51 | +----+---------------------+
从结果可以发现更新操作未更新时间戳列
==============================================================================
如果在定义时间戳字段时列定义为:c1 timestamp on update current_timestamp,那么c1列仅在更新且未指定更新值时会被更新为当前时间,而在插入时如果未指明插入值则将该事件戳列赋值为‘0000-00-00 00:00:00’
create table tb1003(id int primary key,c1 timestamp on update current_timestamp); insert into tb1003(id) select 1; select * from tb1003; +----+---------------------+ | id | c1 | +----+---------------------+ | 1 | 0000-00-00 00:00:00 | +----+---------------------+ 从结果可以发现插入时列未被赋值为当前时间而被赋值为'0000-00-00 00:00:00’。
==============================================================================
当时间戳字段被设置默认值,如在定义时间戳字段时列定义为:c1 timestamp default 0,,则不会为字段增加默认not null default current_timestamp on update current_timestamp属性
create table tb1004(id int primary key,c1 timestamp default 0); 查看建表语句变为: create table `tb1004` ( `id` int(11) not null, `c1` timestamp not null default '0000-00-00 00:00:00', primary key (`id`) ) engine=innodb default charset=utf8 insert into tb1004(id) select 1 union select 2; update tb1004 set id=3 where id=1; select * from tb1004; +----+---------------------+ | id | c1 | +----+---------------------+ | 2 | 0000-00-00 00:00:00 | | 3 | 0000-00-00 00:00:00 | +----+---------------------+ 从结果可以发现,无论是插入还是更新,都没有将时间戳字段更新为当前时间,而是使用默认值!
上一篇: centos7 安装mysql5.7以及一些细节问题
下一篇: 设计模式——代理模式