Mysql及Navicat中设置表字段自动填充当前时间及修改时间

CURRENT_TIMESTAMP表示插入新行时,该列将自动设置为当前时间,create_time设置了默认值为CURRENT_TIMESTAMP后,插入新数据就会在create_time字段中自动填充当前时间。

ON UPDATE CURRENT_TIMESTAMP表示数据行更新时,该列将自动设置为当前时间,update_time设置了数据更新后就会在update_time字段中自动填充当前时间。

注意:这两个函数都可以传参数,传参可以传0-6的数字,表示时间的精度,比如 CURRENT_TIMESTAMP(3)表示精确到毫秒值,在设置时函数与字段的时间精度要保持一致,否则会报错:ERROR 1067 (42000): Invalid default value for 'tmt'

支持的字段类型:

MySQL 5.6.5之后,TIMESTAMPDATETIME列都支持自动更新,且一个表可设置多个自动更新列。

MySQL 5.6.5之前,只有TIMESTAMP支持自动更新,每个表只能有一个自动更新的时间列。

 

  • 创建表时设置字段为自动更新时间列。
CREATE TABLE table_name (
    id INT NOT NULL AUTO_INCREMENT,
    data VARCHAR(255) NOT NULL,
    create_time datetime DEFAULT CURRENT_TIMESTAMP,
    update_time datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id) USING BTREE
) ENGINE = InnoDB CHARAcTER SET = utf8mb4 coLLATE = utf8mb4_general_ci
  • 添加新字段为自动更新时间列。
ALTER TABLE table_name
ADD COLUMN create_time datetime NULL DEFAULT CURRENT_TIMESTAMP COMMIT '创建时间'
ADD COLUMN update_time  datetime NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMIT '修改时间'
  • 更新已有字段为自动更新时间列。
ALTER TABLE table_name
MODIFY COLUMN create_time datetime NULL DEFAULT CURRENT_TIMESTAMP COMMIT '创建时间'
MODIFY COLUMN update_time  datetime NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMIT '修改时间'
  • 通过navicat设置字段为自动更新时间列。

选中列后在默认值写上CURRENT_TIMESTAMP,默认值下面的选项意思是当前列是否要在数据行内容更新时更新当前列时间。

总结:

好处: 无需依赖业务更新时间,所有的db操作都会自动记录,便于排查问题。

不足: 数据库服务器和业务服务器可能存在时间差,导致业务变动的时间与数据库时间戳存在差异,给实际维护和使用带来障碍,只能尽可能的校准服务器时间,但不能绝对避免该问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值