Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL dấu thời gian hai cột giá trị mặc định NGAY BÂY GIỜ LỖI 1067

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thực thi PDO với một mảng chứa các giá trị rỗng

  2. 1052:Cột 'id' trong danh sách trường không rõ ràng

  3. Nhập giới hạn kích thước tệp trong PHPMyAdmin

  4. Knex.js có ngăn chặn tiêm sql không?

  5. Tiện ích mở rộng MySQL không dùng nữa trong PHP 5.5.x