2009-07-16 17 views
16

Ho un campo DATETIME 'CREATED_DATE' che vorrei essere popolato con la data corrente su inserto. Quale sintassi dovrei usare per il trigger per questo? Questo è quello che ho finora ma non è corretto.MySQL impostare la data corrente in un campo DATETIME sull'inserto

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

risposta

16

La soluzione migliore è quella di cambiare quella colonna in un timestamp. MySQL utilizzerà automaticamente il primo timestamp di una riga come valore 'last modified' e lo aggiornerà per te. Questo è configurabile se vuoi solo risparmiare tempo di creazione.

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

+0

funziona perfettamente, grazie :) – William

+1

ultime versioni di mysql non supporta più time-stamp, quindi possiamo avere un timestamp e più trigger. –

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

Posso aggiungere un altro compito con questo >> "SET NEW.last_visited = NOW();" ? Ho fatto ma si sono verificati errori.Grazie. @pevik –

3

Utilizzando Now() non è una buona idea. Salva solo l'ora e la data attuali. Non aggiornerà la data e l'ora corrente quando aggiorni i tuoi dati. Se si desidera aggiungere l'ora una volta, Il valore predefinito = Ora() è l'opzione migliore. Se si desidera utilizzare il timestamp. e desidera aggiornare questo valore, ogni volta che la riga viene aggiornata. Quindi, il trigger è la migliore opzione da utilizzare.

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

Questi due toturial contribuirà ad implementare il grilletto.

11

Dal momento che MySQL 5.6.X si può fare questo:

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

In questo modo la vostra colonna verrà aggiornato con il timestamp corrente quando viene inserita una nuova riga, o aggiornato.

Se stai usando MySQL Workbench, si può semplicemente mettere CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP nel campo valore di default, in questo modo:

enter image description here

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

Problemi correlati