NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP的细节

 `gs_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '数据库最后更新时间'

搞了大半年,才因为某些业务的问题,发现这么个隐藏点。 

NOT NULL DEFAULT CURRENT_TIMESTAMP, 这句话就不用参与下面的讨论了, 这个字段不为空,如果新增的时候为空,就会默认存储为当前系统的时间。

gs_modified ,这个字段所在的表主要是来源于业务库,然后冷库去备份业务库的数据,最开始的版本是 insert into on dumplicate key update

, 这张表有一张主键,每次备份的时候如果不存在就插入,如果存在,就更新一些业务数据的字段。

所以, ON UPDATE CURRENT_TIMESTAM 就起效果了, 如果是update语句,不管这个字段有没有传递过来,都会被更新成当前时间。

而后来冷备份的逻辑,变成了replace into,所以ON UPDATE CURRENT_TIMESTAM 就起不了效果了,永远都是业务库数据传递过来的gs_modified。

你可能感兴趣的:(mysql)