MySQL timestamp自动更新时间

本文详细介绍了MySQL中TIMESTAMP数据类型的四种不同设置方式:ONUPDATE CURRENT_TIMESTAMP、default CURRENT_TIMESTAMP、default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP以及不写默认和ONUPDATE子句的情况,并通过实例展示了它们在插入和更新记录时的时间自动更新行为。了解这些设置可以帮助优化数据库中时间戳字段的管理。

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

在mysql中timestamp数据类型是一个比较特殊的数据类型,他可以自动在你不使用程序更新情况下,插入或者修改记录会自动更新timestamp的值。
1.ON UPDATE CURRENT_TIMESTAMP  只有对记录进行修改时才更新为当前时间,插入是不会的

2.default CURRENT_TIMESTAMP  在插入记录时,会添加当前时间,但在修改记录时,不会再更新当前时间

3.default current_timestamp on update CURRENT_TIMESTAMP 在插入或者更新记录时,都会更新当前时间

4.如果default或on update 子句都不写,就等同于 default current_timestamp on update CURRENT_TIMESTAMP

下面以几组代码做例子:

1.ON UPDATE CURRENT_TIMESTAMP
CREATE TABLE record1 (
    id INT PRIMARY KEY,
    name VARCHAR (20) NOT NULL,
    time TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
1.1插入后查询
 insert into record1(id,name) values(1,'new titile');

结果:发现插入时,时间不会自动更新进去


1.2修改后查询

update record1 set name="1update the title" where id=1;


结果:修改记录时,会记录时间。

2.default CURRENT_TIMESTAMP 
CREATE TABLE record2 (
    id INT PRIMARY KEY auto_increment,
    name VARCHAR (20) NOT NULL,
    time TIMESTAMP default CURRENT_TIMESTAMP
)
2.1执行上述同样的插入操作,再查询


结果:发现插入时自动记录了时间

2.2执行上述同样的修改操作

结果:发现时间没有更新。

3.default current_timestamp on update CURRENT_TIMESTAMP
CREATE TABLE record3 (
    id INT PRIMARY KEY auto_increment,
    name VARCHAR (20) NOT NULL,
    time TIMESTAMP default current_timestamp on update CURRENT_TIMESTAMP
)
3.1执行上述同样的插入操作

 结果:执行上述同样的修改操作插入时自动更新了时间

3.2执行上述同样的修改操作


结果:修改时也自动更新了时间

4.default或on update 子句都不写
CREATE TABLE record4 (
    id INT PRIMARY KEY auto_increment,
    name VARCHAR (20) NOT NULL,
    time TIMESTAMP 
)
4.1执行上述同样的插入操作


4.2执行上述同样的删除操作


结果 :这里等同于第三种做法
————————————————
版权声明:本文为CSDN博主「Chenny丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_1017097573/article/details/65633126

### 如何配置 MySQL 数据库表使某个日期字段能自动更新 为了实现在 `MySQL` 表中的特定日期字段能够自动更新,可以利用 `TIMESTAMP` 或者 `DATETIME` 类型并设置默认值以及触发条件来达成这一目的。对于希望每次记录被修改时该时间戳随之变化的情况,在创建表结构的时候定义此列具有 `ON UPDATE CURRENT_TIMESTAMP` 属性即可。 下面展示了一个具体的例子,其中包含了如何通过 SQL 语句在 `MySQL Workbench` 中建立一张带有自动生成和更新的时间戳字段的表格: ```sql CREATE TABLE example_table ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时初始化时间为当前时刻 updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 更新时重置为当前时刻 ); ``` 上述代码片段展示了怎样声明两个特殊类型的字段:一个是当新行插入时会自动填充当前系统时间;另一个则会在任何对该行数据做出更改操作之后刷新其值至最新的服务器时间[^1]。 此外需要注意的是,如果已经存在一个没有这些特性的旧版表,则可以通过执行 ALTER TABLE 命令来进行改造以满足需求: ```sql ALTER TABLE existing_table MODIFY COLUMN update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; ``` 这段命令将会把名为 `existing_table` 的表里叫做 `update_time` 的列转换成每当对应的数据发生变化就会自动调整到最新时间的形式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值