Để tự động ghi nhận thời điểm tạo bản ghi (created_at) mà không cần ứng dụng truyền giá trị, MySQL cho phép đặt giá trị mặc định cho cột TIMESTAMP (hoặc DATETIME từ MySQL 5.6.5) là CURRENT_TIMESTAMP.
Tạo bảng với cột tự động ghi thời gian tạo
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ArrivalTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Chèn dữ liệu: Có truyền giờ và không truyền giờ
mysql> INSERT INTO DemoTable (ArrivalTime) VALUES ('2018-01-31 10:34:56'); -- Truyền giờ cụ thể
mysql> INSERT INTO DemoTable VALUES (); -- Không truyền, dùng DEFAULT
mysql> INSERT INTO DemoTable (ArrivalTime) VALUES ('2019-01-31 11:10:12');
Kết quả
mysql> SELECT * FROM DemoTable;
+----+---------------------+
| Id | ArrivalTime |
+----+---------------------+
| 1 | 2018-01-31 10:34:56 |
| 2 | 2019-05-02 12:50:24 | -- Thời điểm thực thi INSERT thứ 2
| 3 | 2019-01-31 11:10:12 |
+----+---------------------+
Quan trọng: Chỉ hoạt động khi INSERT
Giá trị DEFAULT CURRENT_TIMESTAMP chỉ được gán khi chèn bản ghi mới (INSERT). Khi UPDATE bản ghi, cột này không tự động cập nhật (trừ khi bạn thêm ON UPDATE CURRENT_TIMESTAMP).
Mở rộng: Cột cập nhật thời gian sửa đổi (updated_at)
CREATE TABLE DemoTable2 (
Id INT PRIMARY KEY AUTO_INCREMENT,
Data VARCHAR(100),
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UpdatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CreatedAt: Chỉ set lúc INSERT.UpdatedAt: Set lúc INSERT VÀ tự động cập nhật lúc UPDATE.
Lưu ý: Chỉ được có một cột TIMESTAMP với DEFAULT CURRENT_TIMESTAMP hoặc ON UPDATE CURRENT_TIMESTAMP trong bảng (trước MySQL 5.6.5). Từ 5.6.5+ có thể có nhiều cột TIMESTAMP/DATETIME với các tùy chọn này.