前言
最近在工作中遇到了一些关于表结构设计的问题,我所在的公司,在表设计的时候有三个字段必须要有,create_time、update_time、version。这些字段也是大多数公司都会要求的,create_time记录创建时间,update_time记录修改时间,version乐观锁版本控制字段。最近遇到的一个问题就在坑爹的update_time上面。
问题描述
update_time这个字段在用户每次修改记录后就要跟新成当前时间,所以在实现更新操作的时候都需要默认的给update_time赋值成now(),有的同事为了偷懒在创建表的时候都加了这样一条语句
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
加上这个触发器,记录在被更新的时候update_time会被重新赋值成当前时间,用户每次更新记录的时候update_time被自动更新,都不用写设置update_time的代码了,貌似问题得到解决了。但是,就在前段时间我们有个全表刷数据的需求,就写了一条SQL语句去执行,需求满足了,但是update_time也被全部刷成一样了,刚好系统上面有个功能是查询一段更新时间内的记录,由于更新时间全部被刷成一样了,这个查询一次查出了几百万条数据导致接口超时。其实,接口超时是一个问题,update_time这个字段的数据被刷成一样了,业务含义没有了才是最大的问题。