9
votes

Colonne MySQL 'Update Timeestamp' - Trigger

J'ajoute une colonne TSU code> (mise à jour TIMESTAMP) de type DateTime code> à un certain nombre de mes tables.

J'ai besoin d'écrire avant de mettre à jour les déclencheurs code> qui mettront à jour la colonne sur actuel_timettamp () code>, mais je ne peux pas le faire correctement. Essayé: P>

DELIMITER $$
CREATE
    TRIGGER `cams`.`tsu_update_csi` BEFORE UPDATE
    ON `cams`.`csi`
    FOR EACH ROW BEGIN
        UPDATE csi SET tsu = CURRENT_TIMESTAMP WHERE csi_code = OLD.csi_code;
    END$$
DELIMITER ;


2 commentaires

Vous devriez probablement mentionner dans la question que vous avez déjà une colonne de type horodatage avec une valeur par défaut de Current_TimeStamp, pour stocker le temps de création des enregistrements.


Tu as raison Ian. Je n'ai pas compris les implications des colonnes à horodatage multiples avant. Merci de votre aide.


4 Réponses :


13
votes

Si le champ peut être défini comme un horodatage, vous pouvez utiliser les éléments suivants:

ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
              ON UPDATE CURRENT_TIMESTAMP);


1 commentaires

Non, je ne peux pas faire cela, si je garde l'original TS colonne: `TS horodatage par défaut actuel_timettamp`



1
votes

Je ne sais pas si cela fonctionnera pour vous, mais vous pouvez toujours en faire un champ horodatage sans valeur par défaut - MySQL définira automatiquement la valeur du premier champ de ce type défini dans la table à l'horodatage actuel sur chaque mise à jour.


1 commentaires

Merci Zerofiz et Ian. J'ai déjà une colonne tts qui est définie sur par défaut actuelle_TimeStamp, car elle était destinée à représenter la "date créée". De ma lecture sur l'horodatage, il n'est pas possible d'utiliser Current_TimeStamp comme valeur par défaut sur une colonne TS et sur la mise à jour dans une autre colonne (ce qui est exactement ce que je voulais vraiment bien sûr). Je vérifie avec le client pour voir si nous pouvons utiliser le champ TS existant comme "Date mise à jour" et distribuer avec la "date créée".



16
votes

D'accord, essayez celui-ci:

DELIMITER $$ CREATE  
    TRIGGER `cams`.`tsu_update_csi` BEFORE UPDATE  
    ON `cams`.`csi`  
      FOR EACH ROW BEGIN  
        SET NEW.tsu = CURRENT_TIMESTAMP;   
END$$ DELIMITER ;


1 commentaires

Merci, cet exemple est ce dont j'avais besoin! Comprendre l'horodatage beaucoup mieux maintenant.



0
votes

TS2 Current_TimeStamp sur la mise à jour Current_TimeStamp Fonctionne pour DateTime et TIMESTAMP, pour un et plusieurs champs

Vous pouvez donc utiliser actuel_timettamp (comme valeur par défaut)

et DateUpdatedated Current_TimeStamp sur la mise à jour actuelle_Timestamp Fonctionne pour DateTime et horodatage TIMESTAMP (comme valeur par défaut)

Vous pouvez utiliser ci-dessus comme commandes SQL ou valeurs par défaut dans MySQL Workbench


0 commentaires