Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL zweispaltiger Zeitstempel-Standardwert JETZT ERROR 1067

Du kannst nur einen haben timestamp-Spalte, die standardmäßig CURRENT_TIMESTAMP ist oder NOW() pro Tisch. Dies ist ein bekannter Fehler in MySQL.

Um dies zu umgehen, machen Sie Ihren Standardwert für die erstellte Spalte zu einem gültigen Zeitstempelwert und fügen Sie dann den Zeitstempel in Ihren CRUD-Anwendungscode ein. Verwenden Sie NOW() oder CURRENT_TIMESTAMP für Ihre aktualisierte Standardspalte.

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

Um die Mängel von MySQL in diesem Bereich weiter zu veranschaulichen, betrachten Sie den folgenden Code:

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

Die Ausgabe davon zeigt Folgendes an:

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.

Das ist schade, weil die Verwendung eines Triggers in diesem Fall eine gute Lösung wäre.