2009-07-16 23 views
16

Tengo un campo 'DATE creado' de DATETIME que me gustaría que se rellene con la fecha actual al insertar. ¿Qué sintaxis debería usar para desencadenar esto? Esto es lo que tengo hasta ahora, pero es incorrecto.MySQL establece la fecha actual en un campo DATETIME en la inserción

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

Respuesta

16

Su mejor opción es cambiar esa columna por una marca de tiempo. MySQL usará automáticamente la primera marca de tiempo en una fila como valor de "última modificación" y la actualizará por usted. Esto es configurable si solo desea guardar el tiempo de creación.

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

+0

funciona perfectamente, gracias :) – William

+1

últimas versiones de mysql no es compatible con varias marcas de tiempo, por lo que podemos tener una marca de tiempo y múltiples activadores. –

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

¿Puedo agregar otra tarea con este >> "SET NEW.last_visited = NOW();" ? Lo hice pero ocurrió errores. Gracias. @pevik –

3

Usando ahora() no es una buena idea. Solo guarda la hora y fecha actual. No actualizará la fecha y hora actual, cuando actualice sus datos. Si desea agregar la hora una vez, el valor predeterminado = Now() es la mejor opción. Si quieres usar la marca de tiempo y desea actualizar este valor, cada vez que se actualiza esa fila. Entonces, el disparador es la mejor opción para usar.

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

Estos dos toturial ayudará a poner en práctica el gatillo.

11

Desde MySQL 5.6.x se puede hacer esto:

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

De esa manera su columna se actualiza con la fecha y hora actual cuando se inserta una nueva fila, o actualizada.

Si estás usando MySQL Workbench, sólo puede poner CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP en el campo Valor predeterminado, así:

enter image description here

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

Cuestiones relacionadas