2009-07-16 10 views
16

Mam pole DATETIME "created_date", które chciałbym uzupełnić aktualną datą po wstawieniu. Jakiej składni powinienem użyć dla tego wyzwalacza? To jest to, co dotychczas, ale jest niepoprawne.Data ustawienia MySQL w polu DATETIME na włożeniu

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

Odpowiedz

16

Najlepiej jest zmienić tę kolumnę na znacznik czasu. MySQL automatycznie użyje pierwszego znacznika czasu z rzędu jako "ostatniej modyfikacji" i zaktualizuje go dla Ciebie. Jest to konfigurowalne, jeśli chcesz tylko zaoszczędzić czas tworzenia.

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

+0

działa idealnie, dziękuję :) – William

+1

najnowsze wersje mysql nie obsługuje wielu znaczników czasu, więc możemy mieć jeden znacznik czasu i wiele wyzwalaczy. –

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

Czy mogę dodać kolejne zadanie z tym >> "SET NEW.last_visited = NOW();" ? Zrobiłem, ale wystąpiły błędy. Dzięki. @pevik –

3

Korzystanie Now() nie jest dobrym pomysłem. Zapisuje tylko bieżący czas i datę. Nie zaktualizuje aktualnej daty i godziny, kiedy zaktualizujesz swoje dane. Jeśli chcesz raz dodać czas, domyślną opcją jest domyślna wartość = Now(). Jeśli chcesz użyć znacznika czasu. i chcesz zaktualizować tę wartość za każdym razem, gdy ten wiersz jest aktualizowany. Wtedy wyzwalacz jest najlepszą opcją do użycia.

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

Te dwa toturial pomogą wdrożyć spust.

11

Ponieważ MySQL 5.6.X można to zrobić:

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

ten sposób swoją kolumna będzie aktualizowany z aktualnym znacznikiem czasu, gdy nowy rząd dodaje, lub aktualizacji.

Jeśli używasz MySQL Workbench, można po prostu umieścić CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP w polu Domyślna wartość, tak jak poniżej:

enter image description here

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