添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

我们在数据库表设计阶段中有个最佳实践,需要在每个表中预留创建时间create_date, 修改时间update_date字段(阿里巴巴编码规约中建议命名为gmt_create,gmt_modified),数据类型均为timestamp。

其中,create_date字段在一般开发中会设置默认值为“CURRENT_TIMESTAMP”,update_date设置默认为“CURRENT_TIMESTAMP”。在之前的实践中,习惯将他们的数据类型设置为datetime,然后在业务逻辑中设置修改时间为当前时间,也就是需要sql中显示的设置修改时间。

我们现在的需求是:

当新增记录的时候,mysql自动将系统的当前时间set到创建时间和更新时间这两个字段中。 
当更新记录的时候,mysql只update更新时间字段的时间,而不修改创建时间字段对应的值。

解决方法很简单,只需要找到表中对应的创建时间和更新时间的字段,将其修改为下列代码所示。

创建时间字段

`creat_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP

更新时间字段

`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP 
    ON UPDATE CURRENT_TIMESTAMP

核心的DDL语句为 ON UPDATE CURRENT_TIMESTAMP

这样便不需要在代码中对记录设置创建时间和修改时间了。

在navicat中的操作为,

找到相应的表—右击—>点击 设计表

选中相应的时间字段,设置字段数据类型为CURRENT_TIMESTAMP,同时选中 根据当前时间戳更新 ,这里navicat会帮我们设置 ON UPDATE CURRENT_TIMESTAMP 属性。

这样,我们的应用就能在无感知的情况下每次更新都能够实时将修改时间反馈到数据库的记录中了。

Aeron CouchDB DDD Dubbo ELK-Stack HTTPS Hexo JDK-concurrent JDK源码解析 Java KindEditor Linux MIT Redis SSO,单点登录 Sharding-JDBC SpringCloud Spring扩展点 TCC-Transaction源码解析 Tomcat auth disruptor docker gRPC hexo kubernates maven mybatis mysql nginx spring-boot springboot web 与你同行 专题-分布式 从零学Netty 代理模式,工作总结,入职感受 分布式 Dubbo 单例模式, 懒加载 实战分布式 年度总结 我们的爱情 数据库 杂谈 汇总盘点推荐 爬虫,WebMagic 电话面试 研磨Kafka 秒杀 自己写分布式组件系列 跟我学RocketMQ 跟我学zookeeper 金融系统 随笔 音视频