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

Tự động lưu thời gian tạo bản ghi trong MySQL với DEFAULT CURRENT_TIMESTAMP

Để 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.