MySQL时间戳
总结:在本教程中,您将了解MySQL TIMESTAMP数据类型和 TIMESTAMP 列特性,例如自动初始化和更新。
MySQL TIMESTAMP 数据类型介绍
MySQL TIMESTAMP 是一种时态数据类型,包含日期和时间的组合。a is的格式固定为 19 个字符。 TIMESTAMP YYYY-MM-DD HH:MM:SS
该 TIMESTAMP 值的范围从 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC 。
当您向表中插入一个 TIMESTAMP 值时,MySQL 会将其从您的连接的时区转换为 UTC 以进行存储。
当您查询一个 TIMESTAMP 值时,MySQL 会将 UTC 值转换回您的连接的时区。请注意,对于其他时间数据类型(例如 DATETIME .
默认情况下,连接时区是 MySQL 服务器的时区。当您连接到 MySQL 服务器时,您可以使用不同的时区。
当您检索 TIMESTAMP 由不同时区的客户端插入的值时,您将获得与存储在数据库中的值不同的值。只要您不更改时区,您就可以获得与 TIMESTAMP 您存储的相同的值。
MySQL TIMESTAMP 时区实例
我们举个例子来看看 MySQL 是如何处理 TIMESTAMP 值的。
首先,创建一个新的表名为 test_timestamp 具有 TIMESTAMP 柱: t1 ;
CREATE TABLE test_timestamp (
t1 TIMESTAMP
);
其次,使用该 SET time_zone 语句将会话的时区设置为 ‘+00:00’ UTC 。
SET time_zone='+00:00';
第三, TIMESTAMP 在 test_timestamp 表中插入一个值。
INSERT INTO test_timestamp(t1)
VALUES('2008-01-01 00:00:01');
第四, TIMESTAMP 从 test_timestamp 表中选择值。
SELECT t1 FROM test_timestamp;

第五,将会话的时区设置为不同的时区,看看我们会从数据库服务器得到什么值:
SET time_zone ='+03:00';
最后从表中查询数据:
SELECT t1 FROM test_timestamp;

如您所见,我们收到了根据新时区调整的不同时间值。
TIMESTAMP 列的自动初始化和更新
考虑以下实例。
CREATE TABLE categories (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
在 categories 表中, created_at 列是 TIMESTAMP 默认值设置为 的列 CURRENT_TIMESTAMP 。
其次,在不指定列值的情况下向表中插入新行: categories created_at
INSERT INTO categories(name)
VALUES ('A');
SELECT * FROM categories;

从输出中可以看出,MySQL 使用插入时的时间戳作为 created_at 列的默认值。
因此, TIMESTAMP 对于未指定列值的插入行,可以将列自动初始化为当前时间戳。此功能称为自动初始化。
第三,向表中添加一个名为的新列。 updated_at categories
ALTER TABLE categories
ADD COLUMN updated_at
TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP;
该 updated_at 列的默认值为 CURRENT_TIMESTAMP 。
而且,我们有一个新的条款 ON UPDATE CURRENT_TIMESTAMP 下面的 DEFAULT CURRENT_TIMESTAMP 条款。我们来看看它的效果。
第四,在表中插入一个新行 categories 。
INSERT INTO categories(name)
VALUES('B');
五、从 categories 表中查询数据:
SELECT * FROM categories;

列的默认值 created_at 是插入行时的时间戳。
六、更新 name 行id为2的列中的值:
UPDATE categories
SET name = 'B+'
WHERE id = 2;
七、从 categories 表中查询数据检查更新:
SELECT *
FROM categories
WHERE id = 2;

请注意, updated_at 列中的值更改为更新行时的时间戳。
The ability of a TIMESTAMP column to be automatically updated to the current timestamp when the value in any other column in the row changed from its current value is called automatic updating.
The column updated_at is referred to as an auto-updated column.
Note that if you execute the UPDATE statement to update the same value for the name column, the updated_at column will not be updated.
UPDATE categories
SET name = 'B+'
WHERE id = 2;
Code language: SQL (Structured Query Language) (sql)
The value in the updated_at remains unchanged.

For more information on automatic initialized and updating, please check it out the time initialization on MySQL website.
从 MySQL 5.6.5 开始, DATETIME 列还具有自动初始化和更新功能。此外, DEFAULT_CURRENT_TIMESTAMP 和 ON UPDATE CURRENT TIMESTAMP 可以应用于多个列。
在本教程中,您了解了 MySQL TIMESTAMP 数据类型以及如何使用 TIMESTAMP 列的自动初始化和更新功能。