mysql timestamp 类型字段自动更新时间

本文详细解释了在MySQL中使用TIMESTAMP类型时不同默认值设置的效果,包括自动初始化、自动更新及常量设置等,并提供了具体的SQL语句示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下两个建表语句的效果是一样的:

以下是代码片段:

CREATE TABLE `test` (
`t1` TIMESTAMP NOT NULL ,
`ww` VARCHAR( 5 ) NOT NULL
) ENGINE = MYISAM
CREATE TABLE `test` (
`t1` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`ww` varchar(5) NOT NULL
) ENGINE=MyISAM ;


以下是代码片段:
自动初始化和更新:
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
只自动初始化:
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
只自动更新
ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
只是给一个常量(注:0000-00-00 00:00:00)
ts TIMESTAMP DEFAULT 0
### 设置 MySQL 长整型时间字段自动更新MySQL 中,`TIMESTAMP` 和 `DATETIME` 是常用的时间类型,但这些都不是长整型(long)。为了实现以毫秒级精度存储并能自动生成和更新的时间戳,可以考虑使用 `BIGINT` 字段来保存 Unix 时间戳的毫秒数。 创建带有自动更新功能的 `BIGINT` 字段可以通过触发器完成。下面是一个例子: #### 创建表结构 ```sql CREATE TABLE example_table ( id INT AUTO_INCREMENT PRIMARY KEY, my_time BIGINT NOT NULL COMMENT 'Unix timestamp in milliseconds', data VARCHAR(255) ); ``` #### 添加插入前触发器 此触发器会在每条记录被插入之前设置 `my_time` 的值为当前时间的毫秒级别 Unix 时间戳。 ```sql DELIMITER // CREATE TRIGGER before_insert_example_table BEFORE INSERT ON example_table FOR EACH ROW BEGIN SET NEW.my_time = UNIX_TIMESTAMP(NOW()) * 1000; END// DELIMITER ; ``` #### 更新时也保持最新时间戳 对于更新操作同样适用,这里定义了一个更新后的触发器: ```sql DELIMITER // CREATE TRIGGER after_update_example_table AFTER UPDATE ON example_table FOR EACH ROW BEGIN IF OLD.my_time != NEW.my_time THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot change the value of my_time directly'; END IF; -- Update to current millisecond-level unix timestamp only when other columns are changed. SET NEW.my_time = UNIX_TIMESTAMP(NOW()) * 1000; END// DELIMITER ; ``` 上述方法确保了每当有新纪录加入或已有记录发生变更时,都会将 `my_time` 自动设为最新的毫秒级别的 Unix 时间戳[^1]。 需要注意的是,在实际应用中应当谨慎处理时间戳的选择。考虑到未来可能出现的问题以及可读性和易用性的因素,有时采用 `DATETIME` 或者 `TIMESTAMP` 可能会更加合适[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值