Que ce soit sur MySQL ou PostgreSQL, c'est la fonction CURRENT_TIMESTAMP qui renvoie l'heure et la date actuelle. C'est d'ailleurs un synonyme de NOW(). La précision est de l'ordre de la seconde (mais sur PostgreSQL, elle peut être étendue à une précision plus élevée).
La date/heure de dernière modification peut être paramétrée lors de la création de la table et du champ :
Le paramètre après DEFAULT indique la valeur à affecter lors de l'insertion avec INSERT.
Le paramètre après ON UPDATE indique la valeur à affecter lors de mise à jour avec UPDATE.
Le SGBD gère automatiquement s'il faut mettre à jour le champ : si un UPDATE ne modifie aucun champ de la ligne, le champ date_derniere_modification ne sera pas non plus modifié.
Sur PostgreSQL, il faudra avoir créé au préalable le champ en utilisant le type Timestamp :
Puis passer par l'utilisation d'une procédure stockée, appelée depuis un déclencheur (Trigger).
La procédure stockée ci-dessous va définir le champ à modifier. J'ai volontairement précisé un schéma, afin que la procédure soit attachée à ce schéma et non partagée entre tous.
La 3ème ligne précise de ne faire de mise à jour de la date/heure qu'à partir du moment où l'une des nouvelles valeurs change.
Ensuite, il faut définir le déclencheur et lui indiquer de lancer la fonction définie précédemment lorsqu'une table précise reçoit un certain événement.
L'événement peut être de type BEFORE ou AFTER croisé avec INSERT, UPDATE ou DELETE. Il est possible de préciser ces types en une seule fois, au moyen d'un OR.
Dans l'exemple ci-dessous, on demande à mettre à jour le champ avant tout INSERT ou UPDATE.
A noter que la fonction peut être réutilisée pour actualiser d'autres tables , pour peu que celles-ci contiennent le même champ date_derniere_modification.
RSS | Informations |