Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL dua kolom stempel waktu default SEKARANG nilai ERROR 1067

Anda hanya dapat memiliki satu kolom stempel waktu yang defaultnya adalah CURRENT_TIMESTAMP atau NOW() per tabel. Ini adalah bug terkenal di MySQL.

Untuk mengatasinya, jadikan default untuk kolom yang dibuat sebagai nilai stempel waktu yang valid, lalu masukkan stempel waktu dalam kode aplikasi CRUD Anda. Gunakan NOW() atau CURRENT_TIMESTAMP untuk kolom default Anda yang diperbarui.

Bahan referensi:http://dev.mysql.com/doc/ refman/5.1/en/timestamp.html

Untuk lebih menggambarkan kekurangan MySQL di area ini, pertimbangkan kode berikut:

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);

Output dari ini akan menampilkan:

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.

Ini mengecewakan karena menggunakan pemicu dalam contoh ini akan menjadi solusi yang baik.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengamankan MySQL:Bagian Satu

  2. com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:Entri duplikat '' untuk kunci 'PRIMARY'

  3. Membuat daftar tertaut atau antrian serupa di MySQL?

  4. Apa cara terbaik untuk menghapus baris lama dari MySQL secara bergulir?

  5. Optimalisasi pencarian MySQL menggunakan like dan wildcard