Mặc dù có một câu trả lời được chấp nhận nhưng tôi không cảm thấy đó là câu trả lời đúng. Đó là cách đơn giản nhất để đạt được những gì cần thiết, nhưng ngay cả khi đã được bật trong InnoDB (thực ra các tài liệu cho bạn biết rằng bạn vẫn nên nhận NULL ...), nếu bạn đọc tài liệu MySQL , ngay cả trong phiên bản hiện tại (8.0) bằng UPDATE_TIME là không phải là lựa chọn đúng đắn, bởi vì:
Dấu thời gian không được duy trì khi máy chủ được khởi động lại hoặc khi bảng bị xóa khỏi bộ đệm từ điển dữ liệu InnoDB.
Nếu tôi hiểu chính xác (không thể xác minh nó trên máy chủ ngay bây giờ), dấu thời gian sẽ được đặt lại sau khi máy chủ khởi động lại.
Đối với các giải pháp thực tế (và, tốt, tốn kém), bạn có giải pháp của Bill Karwin với CURRENT_TIMESTAMP và tôi muốn đề xuất một khác, dựa trên các kích hoạt (tôi đang sử dụng giải pháp đó).
Bạn bắt đầu bằng cách tạo một bảng riêng (hoặc có thể bạn có một số bảng khác có thể được sử dụng cho mục đích này) sẽ hoạt động giống như một bộ lưu trữ cho các biến toàn cục (ở đây là dấu thời gian). Bạn cần lưu trữ hai trường - tên bảng (hoặc bất kỳ giá trị nào bạn muốn giữ ở đây dưới dạng id bảng) và dấu thời gian. Sau khi bạn có nó, bạn nên khởi tạo nó với id bảng này + ngày bắt đầu (NOW () là một lựa chọn tốt :)).
Bây giờ, bạn di chuyển đến các bảng bạn muốn quan sát và thêm các kích hoạt SAU KHI CHỌN / CẬP NHẬT / XÓA với quy trình này hoặc tương tự:
CREATE PROCEDURE `timestamp_update` ()
BEGIN
UPDATE `SCHEMA_NAME`.`TIMESTAMPS_TABLE_NAME`
SET `timestamp_column`=DATE_FORMAT(NOW(), '%Y-%m-%d %T')
WHERE `table_name_column`='TABLE_NAME';
END