2008-09-30 52 views
21

Có thể xác định cột dấu thời gian trong bảng MySQL sẽ tự động được cập nhật mỗi khi một trường trong cùng một hàng được sửa đổi không? Lý tưởng nhất là cột này ban đầu nên được đặt vào thời gian một hàng được chèn vào.cột dấu thời gian mysql

Chúc mừng, Don

Trả lời

16

Đó là chức năng mặc định của loại cột timestamp. Tuy nhiên, lưu ý rằng định dạng của loại này là yyyymmddhhmmss (tất cả các chữ số, không có dấu hai chấm hoặc dấu tách khác).

EDIT: Các bình luận trên về định dạng là chỉ đúng đối với các phiên bản của MySQL < 4.1 ... Các phiên bản sau định dạng nó như một DateTime

+3

Theo tài liệu MySQL 5.0, loại dấu thời gian có cùng định dạng với ngày giờ (ví dụ: 'YYYY-MM-DD HH: MM: SS'). –

0

IIRC, cột đầu tiên trong một bảng kiểu timestamp được đặt khi bản ghi được tạo và không thể thay đổi. Cột dấu thời gian loại thứ hai được đặt bất cứ khi nào bản ghi được cập nhật. Hoặc ngược lại.

Tôi chưa thực hiện nhiều công việc MySQL, vì vậy bạn sẽ muốn xác minh điều này.

31

Bạn có thể sử dụng cột dấu thời gian như các áp phích khác được đề cập. Dưới đây là SQL bạn có thể sử dụng để thêm cột trong:

ALTER TABLE `table1` ADD `lastUpdated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ; 

này thêm một cột gọi là 'lastUpdated' với một giá trị mặc định của ngày hiện tại/lần. Khi bản ghi đó được cập nhật (cho phép nói 5 phút sau) dấu thời gian đó sẽ tự động cập nhật vào thời điểm hiện tại.

+6

Sau đây dường như là đủ: ALTER TABLE 'table1' ADD' lastUpdated' TIMESTAMP; –

0

Dấu thời gian của MySQL được đặt với thời gian tạo hoặc cập nhật chỉ khi giá trị mặc định của chúng được đặt là giá trị mặc định. ALTER TABLE some_table ADD when TIMESTAMP DEFAULT CURRENT_TIMESTAMP.
Nếu không nó hoạt động giống như một trường DateTime, chỉ có nó liên quan đến UTC 1970/01/01, do đó, nó là một điểm tuyệt đối trong thời gian không phụ thuộc vào một múi giờ cụ thể như là DateTime.

1

Đây là những gì tôi đã quan sát (MySql 5.7.11) -

Cột dấu thời gian đầu tiên trong bảng được dấu thời gian hiện tại là giá trị mặc định. Vì vậy, nếu bạn làm một INSERT hoặc UPDATE mà không cung cấp một giá trị, cột sẽ nhận được dấu thời gian hiện tại.

Bất kỳ cột TIMESTAMP nào tiếp theo sẽ có giá trị mặc định được xác định rõ ràng. Nếu bạn có hai cột TIMESTAMP và nếu bạn không chỉ định giá trị mặc định cho cột thứ hai, bạn sẽ gặp lỗi này khi cố gắng tạo bảng -

ERROR 1067 (42000): Giá trị mặc định không hợp lệ cho 'COLUMN_NAME'

Các vấn đề liên quan