sql >> Database >  >> RDS >> Mysql

MySQL twee kolommen tijdstempel standaard NU-waarde ERROR 1067

Je kunt er maar één hebben tijdstempelkolom die standaard is ingesteld op CURRENT_TIMESTAMP of NOW() per tafel. Dit is een bekende bug in MySQL.

Om dit te verhelpen, maakt u uw standaardwaarde voor de gemaakte kolom een ​​geldige tijdstempelwaarde en voegt u vervolgens de tijdstempel in uw CRUD-toepassingscode in. Gebruik NOW() of CURRENT_TIMESTAMP voor uw bijgewerkte kolomstandaard.

Referentiemateriaal:http://dev.mysql.com/doc/ refman/5.1/nl/timestamp.html

Overweeg de volgende code om de tekortkoming van MySQL op dit gebied verder te illustreren:

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

De uitvoer hiervan wordt weergegeven:

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.

Dit is jammer, omdat het in dit geval een goede oplossing zou zijn om een ​​trigger te gebruiken.



  1. Laat het verwijderen van een tabel in MySQL ook de indexen vallen?

  2. Laravel classloader.php-fout kan stream niet openen:geen bestand of map

  3. Bibliotheek niet geladen:libmysqlclient.16.dylib-fout bij het uitvoeren van 'rails server' op OS X 10.6 met mysql2 gem

  4. Laravel-tijdstempel wordt bijgewerkt zonder expliciete oproep om dit te doen