mysql实现updated_at字段在更新时自动赋值

背景

在实际开发中,经常遇到,使用到两个这样的字段created_at和updated_at字段,在以往我使用的Laravel框架中,框架能自动实现。现在使用其他框架,有的没有集成这样的功能。所以,寻找其他方式。

实际在mysql中可以实现这样的效果。
created_at很简单,创建表时设置默认值为CURRENT_TIMESTAMP即可
updated_at也可以实现在更新时自动更新为CURRENT_TIMESTAMP

注意

created_atupdated_at都是timestamp类型

实现方式

1.如果还没创建表,可以创建表时这样写。

created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ,
updated_at timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,

2.如果已经创建好了,可以用以下命令修改,添加ON UPDATE CURRENT_TIMESTAMP属性

ALTER TABLE t_basic_users CHANGE updated_at updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

语法说明:
ALTER TABLE 表名 CHANGE 列名 新列名 类型 NOT NULL ON UPDATE CURRENT_TIMESTAMP

资料参考:

http://www.mamicode.com/info-detail-1807313.html
https://www.cnblogs.com/kevingrace/p/6269356.html

### MySQL 中 `TIMESTAMP` 数据类型的意义及用法 #### 1. **意义** `TIMESTAMP` 是一种用于存储日期和间信息的数据类型,在 MySQL 中具有特定的间范围和行为特性。它的主要特点是占用较少的存储空间(仅需 4 个字节),并能以人类可读的日期间格式展示数据,同支持自动更新功能[^1]。 其间范围限定为 `'1970-01-01 00:00:01.000000'` 至 `'2038-01-19 03:14:07.999999'`,这一限制源于 Unix 间戳的设计原理[^4]。因此,对于需要长期保存历史记录的应用场景,可能需要考虑其他替代方案如 `DATETIME`。 #### 2. **用途** 以下是 `TIMESTAMP` 的常见应用场景: - **自动记录事件发生间** 当表中定义了一个或多个 `TIMESTAMP` 字段,默认情况下这些字段会在插入新记录或者更新现有记录自动赋值为当前系统间。这种机制非常适合用来跟踪记录的创建间和最后修改间。 - **节省存储空间** 相较于 `DATETIME` 类型(占用 8 个字节),`TIMESTAMP` 更加紧凑高效,适合对存储资源敏感的环境。 - **跨平台兼容性** 尽管存在区转换问题,但通过合理配置服务器与区参数,可以实现不同地区客户端之间的一致性处理[^5]。 #### 3. **注意事项** 尽管 `TIMESTAMP` 提供了许多便利之处,但在实际应用过程中仍需要注意以下几个方面: - **区影响** 插入或检索 `TIMESTAMP` 值会受到 MySQL Server 所处区的影响。如果未正确设置全局变量 `time_zone` 或者连接级别的区选项,则可能导致显示的间与预期不符。 - **默认值设定** 如果希望某列始终反映最新操作刻而非固定初始值,则应显式指定属性 ON UPDATE CURRENT_TIMESTAMP;否则该列只会保留首次写入的状态。 ```sql CREATE TABLE example ( id INT PRIMARY KEY AUTO_INCREMENT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 记录创建updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 更新间为最近一次改动 ); ``` 上述 SQL 创建了一张包含两个间戳字段的例子表格:一个是只标记对象诞生瞬间(`created_at`);另一个则随着每次变更同步刷新(`updated_at`)。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值