2009-07-16 29 views
16

Ich habe ein 'created_date' DATETIME-Feld, das ich mit dem aktuellen Datum bei der Einfügung gefüllt werden möchte. Welche Syntax sollte ich für den Trigger dafür verwenden? Dies ist, was ich bisher habe, aber es ist falsch.MySQL aktuelle Datum in einem DATETIME-Feld auf Einfügen setzen

CREATE TRIGGER set_created_date 
BEFORE INSERT ON product 
FOR EACH ROW BEGIN 
SET NEW.created_date = now(); 

Antwort

16

Ihre beste Wette ist, diese Spalte zu einem Zeitstempel zu ändern. MySQL verwendet automatisch den ersten Zeitstempel in einer Zeile als "letzten Änderungswert" und aktualisiert ihn für Sie. Dies ist konfigurierbar, wenn Sie nur die Erstellungszeit speichern möchten.

See doc http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html

+0

funktioniert perfekt, danke :) – William

+1

neuesten Versionen von mysql unterstützt nicht mehrere Zeitstempel, also können wir einen Zeitstempel und mehrere Trigger haben. –

22
DELIMITER ;; 
CREATE TRIGGER `my_table_bi` BEFORE INSERT ON `my_table` FOR EACH ROW 
BEGIN 
    SET NEW.created_date = NOW(); 
END;; 
DELIMITER ; 
+1

Kann ich eine weitere Aufgabe mit diesem hinzufügen >> "SET NEW.last_visited = NOW();" ? Ich habe aber Fehler aufgetreten. Danke. @pevik –

3

Mit Now() ist keine gute Idee. Es speichert nur die aktuelle Uhrzeit und das Datum. Es aktualisiert das aktuelle Datum und die aktuelle Uhrzeit nicht, wenn Sie Ihre Daten aktualisieren. Wenn Sie die Uhrzeit einmal hinzufügen möchten, ist der Standardwert = Now() die beste Option. Wenn Sie den Zeitstempel verwenden möchten. und möchten diesen Wert jedes Mal aktualisieren, wenn diese Zeile aktualisiert wird. Dann ist Trigger die beste zu verwendende Option.

  1. http://www.mysqltutorial.org/sql-triggers.aspx
  2. http://www.tutorialspoint.com/plsql/plsql_triggers.htm

Diese beiden toturial wird dazu beitragen, den Auslöser zu implementieren.

11

Da MySQL 5.6.X Sie können dies tun:

ALTER TABLE `schema`.`users` 
CHANGE COLUMN `created` `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ; 

Auf diese Weise Ihre Spalte mit dem aktuellen Zeitstempel aktualisiert wird, wenn eine neue Zeile eingefügt oder aktualisiert werden.

Wenn Sie MySQL Workbench verwenden, können Sie nur CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP setzen im Feld Standardwert, etwa so:

enter image description here

http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html

Verwandte Themen