J'ai un champ DATETIME 'created_date' que je souhaiterais remplir avec la date actuelle lors de l'insertion. Quelle syntaxe dois-je utiliser pour le déclencheur pour cela? C'est ce que j'ai jusqu'à présent mais c'est incorrect.
CREATE TRIGGER set_created_date
BEFORE INSERT ON product
FOR EACH ROW BEGIN
SET NEW.created_date = now();
Votre meilleur pari est de changer cette colonne en un horodatage. MySQL utilisera automatiquement le premier horodatage consécutif comme valeur de "dernière modification" et le mettra à jour pour vous. Ceci est configurable si vous voulez simplement gagner du temps de création.
Voir doc http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
DELIMITER ;;
CREATE TRIGGER `my_table_bi` BEFORE INSERT ON `my_table` FOR EACH ROW
BEGIN
SET NEW.created_date = NOW();
END;;
DELIMITER ;
Depuis MySQL 5.6.X, vous pouvez le faire:
ALTER TABLE `schema`.`users`
CHANGE COLUMN `created` `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ;
De cette façon, votre colonne sera mise à jour avec l'horodatage actuel lorsqu'une nouvelle ligne est insérée ou mise à jour.
Si vous utilisez MySQL Workbench, vous pouvez simplement mettre CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
dans le champ de valeur DEFAULT, comme ceci:
http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html
Utiliser Now () n'est pas une bonne idée. Il enregistre uniquement l'heure et la date actuelles. Il ne mettra pas à jour la date et l'heure actuelles, lorsque vous mettez à jour vos données. Si vous souhaitez ajouter l'heure une fois, la valeur par défaut = Now () est la meilleure option. Si vous souhaitez utiliser l'horodatage. et souhaitez mettre à jour la valeur this, chaque fois que cette ligne est mise à jour. Ensuite, le déclencheur est la meilleure option à utiliser.
Ces deux totaux aideront à implémenter le déclencheur.