Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách tự động lưu timestamp khi insert/update trong MySQL


2 phương pháp chính

Phương pháp 1: Khi tạo bảng (DEFAULT CURRENT_TIMESTAMP)

CREATE TABLE ten_bang (
    ten_cot DATETIME DEFAULT CURRENT_TIMESTAMP
);

Phương pháp 2: Thêm cột vào bảng hiện có (ALTER TABLE)

ALTER TABLE ten_bang 
ADD ten_cot DATETIME DEFAULT CURRENT_TIMESTAMP;

Ví dụ chi tiết

Phương pháp 1: Tạo bảng mới

mysql> CREATE TABLE CurrentTimeStampDemo ( 
-> CreationDate DATETIME DEFAULT CURRENT_TIMESTAMP 
-> ); 
Query OK, 0 rows affected (0.61 sec)

mysql> INSERT INTO CurrentTimeStampDemo VALUES(); 
Query OK, 1 row affected (0.12 sec)

mysql> SELECT * FROM CurrentTimeStampDemo;
+---------------------+ 
| CreationDate        | 
+---------------------+ 
| 2019-01-02 15:53:03 | 
+---------------------+ 
1 row in set (0.00 sec)

Phương pháp 2: ALTER TABLE

mysql> CREATE TABLE Current_TimestampDemo ( 
-> Id INT 
-> ); 
Query OK, 0 rows affected (0.43 sec)

mysql> ALTER TABLE Current_TimestampDemo 
-> ADD CreationDate DATETIME DEFAULT CURRENT_TIMESTAMP; 
Query OK, 0 rows affected (0.53 sec)

mysql> INSERT INTO Current_TimestampDemo(Id) VALUES(1); 
Query OK, 1 row affected (0.19 sec)

mysql> SELECT CreationDate FROM Current_TimestampDemo;
+---------------------+ 
| CreationDate        | 
+---------------------+ 
| 2019-01-02 16:25:12 | 
+---------------------+ 
1 row in set (0.00 sec)

Nâng cao: Tự động cập nhật khi UPDATE (ON UPDATE)

CREATE TABLE ten_bang (
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

Ví dụ

mysql> CREATE TABLE AutoTimestampDemo (
-> Id INT,
-> CreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
-> UpdatedAt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
-> );
Query OK, 0 rows affected (0.55 sec)

mysql> INSERT INTO AutoTimestampDemo(Id) VALUES(1);
Query OK, 1 row affected (0.10 sec)

mysql> SELECT * FROM AutoTimestampDemo;
+------+---------------------+---------------------+ 
| Id   | CreatedAt           | UpdatedAt           | 
+------+---------------------+---------------------+ 
| 1    | 2024-01-15 10:30:00 | 2024-01-15 10:30:00 | 
+------+---------------------+---------------------+
mysql> UPDATE AutoTimestampDemo SET Id = 2 WHERE Id = 1;
Query OK, 1 row affected (0.12 sec)

mysql> SELECT * FROM AutoTimestampDemo;
+------+---------------------+---------------------+ 
| Id   | CreatedAt           | UpdatedAt           | 
+------+---------------------+---------------------+ 
| 2    | 2024-01-15 10:30:00 | 2024-01-15 10:31:15 | 
+------+---------------------+---------------------+

Lưu ý quan trọng

  • Chỉ 1 cột cho phép DEFAULT CURRENT_TIMESTAMP (trước MySQL 5.6.5)
  • MySQL 5.6.5+ cho phép nhiều cột timestamp với default
  • Kiểu dữ liệu: TIMESTAMP (1970-2038) vs DATETIME (1000-9999)
  • TIMESTAMP tự chuyển đổi múi giờ, DATETIME không

Khuyến nghị hiện đại (MySQL 8.0+)

CREATE TABLE ten_bang (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);