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

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

以下是代码片段:

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
### 创建带有 `TIMESTAMP` 类型字段的表 在 MySQL 中,可以通过 `CREATE TABLE` 语句创建包含 `TIMESTAMP` 类型字段的表。`TIMESTAMP` 字段通常用于存储日期和时间信息,并且可以自动设置为当前时间或在记录更新时自动更新[^3]。 #### 基本语法 使用 `CREATE TABLE` 语句定义 `TIMESTAMP` 字段的基本格式如下: ```sql CREATE TABLE table_name ( column1 datatype, column2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP, ... ); ``` #### 示例 以下是一个完整的示例,展示如何创建一个包含 `TIMESTAMP` 字段的表,并利用其自动更新功能: ```sql CREATE TABLE example_table ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(100), create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id) ); ``` 在这个例子中: - `create_time` 字段会在记录首次插入时自动设置为当前时间。 - `update_time` 字段不仅会在记录插入时自动设置为当前时间,还会在每次记录更新时自动更新为当前时间[^3]。 #### 自动更新功能 `TIMESTAMP` 类型支持多种自动更新选项,例如: - **默认值**:通过 `DEFAULT CURRENT_TIMESTAMP` 设置默认值为当前时间。 - **更新时更新**:通过 `ON UPDATE CURRENT_TIMESTAMP` 设置在记录更新时自动更新时间。 #### 注意事项 - **时区问题**:`TIMESTAMP` 类型会根据当前会话的时区进行转换,因此在跨时区环境中使用时需要特别注意时区设置[^3]。 - **存储范围**:`TIMESTAMP` 的取值范围是从 `1970-01-01 00:00:01 UTC` 到 `2038-01-19 03:14:07 UTC`,超出此范围的值将无法存储。 #### 复杂场景应用 在复杂查询场景中,可以通过 `WITH AS` 结合 `CREATE TABLE AS` 来创建临时表并填充数据。例如: ```sql DROP TABLE IF EXISTS tmp.tmp_table; CREATE TABLE tmp.tmp_table AS WITH a AS ( SELECT id, column1 FROM table1 WHERE id <= 12 ), lz AS ( SELECT id, column1 FROM table1 WHERE id >= 40 UNION ALL SELECT id, column1 FROM table1 WHERE id > 16 AND id < 20 ) SELECT a.*, lz.*, CURRENT_TIMESTAMP AS create_time, CURRENT_TIMESTAMP AS update_time, 'ur-name' AS creator FROM a, lz ORDER BY lz.id; ``` 上述示例展示了如何结合 CTE(Common Table Expression)和 `TIMESTAMP` 字段来创建新表并填充数据[^2]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值