MySQL中datetime类型与timestamp类型的区别

在平常中,我们总会有这样的需求,在插入或者修改时插入当前系统时间,有些童鞋的做法是把时间字段类型设置为datetime,然后在PHP端用date函数拼接SQL语句,或者使用NOW()函数。其实在MySQL中,datetime只是表示数据类型为YYYY-mm-dd HH:ii:ss格式,而timestamp类型则表示当前系统时间,无需写值。

我们创建一个b表,字段t1类型为datetime,t2类型为timestamp

【国内直连ChatGPT 29元起】
国内直连ChatGPT,Plus会员每月29元起,支持最新o1模型探索更多领域,无需注册OpenAI账号。

mysql> create table b(t1 datetime,t2 timestamp);                   
Query OK, 0 rows affected (0.01 sec)
mysql> desc b;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type      | Null | Key | Default           | Extra                       |
+-------+-----------+------+-----+-------------------+-----------------------------+
| t1    | datetime  | YES  |     | NULL              |                             |
| t2    | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+-----------------------------+
2 rows in set (0.00 sec)

我们插入一条t1和t2都是null空值的记录

mysql> insert into b values(null,null);
Query OK, 1 row affected (0.03 sec)

看看结果

mysql> select * from b;
+------+---------------------+
| t1   | t2                  |
+------+---------------------+
| NULL | 2012-07-04 13:31:11 |
+------+---------------------+
1 row in set (0.00 sec)

我们发现,t1的值为NULL,t2的值为执行插入语句时的系统时间。所以如果有增改记录更新当前系统时间的可以把字段类型设置为timestamp,这样在SQL语句里就不需要再为该字段赋值即可完成插入当前系统时间的操作。

最后提示一下一个表中只能有一个字段的类型为timestamp类型

分享

TITLE: MySQL中datetime类型与timestamp类型的区别

LINK: https://www.qttc.net/118-mysql-datetime-timestamp.html

NOTE: 原创内容,转载请注明出自琼台博客