Bạn chỉ có thể có một cột dấu thời gian mặc định là CURRENT_TIMESTAMP
hoặc NOW()
mỗi bảng. Đây là một lỗi nổi tiếng trong MySQL.
Để khắc phục điều này, hãy đặt mặc định của bạn cho cột đã tạo một giá trị dấu thời gian hợp lệ, sau đó chèn dấu thời gian vào mã ứng dụng CRUD của bạn. Sử dụng NOW()
hoặc CURRENT_TIMESTAMP
cho cột được cập nhật mặc định của bạn.
Tài liệu tham khảo: http://dev.mysql.com/doc/ refman / 5.1 / vi / timestamp.html
Để minh họa thêm cho thiếu sót của MySQL trong lĩnh vực này, hãy xem xét đoạn mã sau:
CREATE TABLE testing_timestamps (
id INT NOT NULL AUTO_INCREMENT,
pk_id INT NOT NULL,
col1 TIMESTAMP DEFAULT 0,
col2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY(id)
);
delimiter $$
CREATE TRIGGER testing_timestamps_trigger
AFTER INSERT ON testing_timestamps
FOR EACH ROW
BEGIN
UPDATE testing_timestamps SET col1 = NOW() WHERE id = MAX(id);
END;
$$
delimiter ;
INSERT INTO testing_timestamps (id) VALUES (0);
Kết quả từ điều này sẽ hiển thị:
mysql> INSERT INTO testing_timestamps (id) VALUES (0);
ERROR 1442 (HY000): Can't update table 'testing_timestamps' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Đây là một sai lầm đáng tiếc vì sử dụng trình kích hoạt trong trường hợp này sẽ là một công việc tốt.