MySQL中的时间戳是什么?

MySQL中的时间戳用于记录数据修改或添加的时间。它有以下两种类型:

  1. CURRENT_TIMESTAMP:记录行插入或更新时的时间。
sql
CREATE TABLE messages (
    id INT PRIMARY KEY,
    content VARCHAR(100),
    created_at TIMESTAMP  # 默认使用CURRENT_TIMESTAMP
);

INSERT INTO messages (id, content)
VALUES (1, 'Hello');

SELECT * FROM messages;

输出:

+----+------+---------------------+ 
| id | content | created_at         |
+----+------+---------------------+
|  1 | Hello | 2020-01-01 12:00:00|  
+----+------+---------------------+
  1. ON UPDATE CURRENT_TIMESTAMP:只在行更新时记录时间。
sql
CREATE TABLE messages (
    id INT PRIMARY KEY,
    content VARCHAR(100),
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
                             ON UPDATE CURRENT_TIMESTAMP
);

INSERT INTO messages (id, content) 
VALUES (1, 'Hello');

UPDATE messages SET content = 'Hi' WHERE id = 1;

SELECT * FROM messages; 

输出:

+----+------+---------------------+
| id | content | updated_at         |  
+----+------+---------------------+
|  1 | Hi     | 2020-01-02 12:00:00|  
+----+------+---------------------+ 

时间戳主要用于:

  1. 记录行的变更时间,用于修复或审计。
  2. 定期清理历史数据。
  3. 基于时间进行数据分类管理。

TIMEZONE参数可用于设置时区,如:

sql
CREATE TABLE messages (
    ...    
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;