|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité(e)
Messages : n/a ![]() |
Bonjour,
Je cherche un conseil sur comment et quels sont les champs que je dois créer dans ma base de données? Je cherche aussi à bien historier (avoir l'historique) les créations et modifications des enregistrements de cette même base. Pour cela, je pense ajouter 2 champs de type "datetime" CreationDate et ModifDate à toutes mes tables. Selon vous, est-ce une bonne manière de modéliser? Quels sont les inconvénients? Un ralentissement. La base est utilisée par un site PHP donc j'ai pensé à mettre à jour ces 2 champs par code? Ou par un trigger serait-il mieux? Ma BD est bien sûr du MySQL 5.1 |
00
|
|
|
#2 |
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
Je fais aussi de l'historisation et c'est comme ceci que j'ai procédé.
J'ai juste ajouté un trigger pour la dateCreation et la dateModification (si la dateCreation existe deja) afin de ne plus remplir ces cases (elles se font automatiquement) Personnellement, je pense que c'est un bon moyen de procédé et c'est assez simple
__________________
![]() ![]() ![]() David55 |
|
|
00
|
|
|
#3 |
|
Invité(e)
Messages : n/a ![]() |
Utiliser les triggers pour un site web ne causera pas de ralentissement?
CreationDate n'est-il pas créé à l'insertion? C'est plutôt ModifDate qui nécessite un traitement par trigger onupdate non? |
00
|
|
|
#4 |
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
On peut aussi faire un trigger à l'insertion (BEFORE INSERT)! Ça t’évitera de gérer ce champ en php (même si ce n'est pas si compliqué).
Et apparemment, ceci ne ralentit pas ton site! Je n'ai jamais eu de problème la dessus!
__________________
![]() ![]() ![]() David55 |
|
|
00
|
|
|
#5 |
|
Invité(e)
Messages : n/a ![]() |
Concernant la date de création, est-ce qu'on peut le définir par une valeur DEFAULT aussi?
J'ai déjà fait du trigger sous Oracle, donc je me demande comment le faire en MySql, y a-t-il un tuto par ici pour voir s'il y a aussi 2 types de triggers? |
00
|
|
|
#6 |
|
Invité(e)
Messages : n/a ![]() |
Pour résumer donc:
1) Je fais "CreationDate DATE DEFAULT CURRENT_DATE" pour le champ reationDate 2) Je crée un déclencheur pour le champ ModifDate: CREATE TRIGGER myTrigger AFTER INSERT ON reservation FOR EACH ROW Est-ce bien correct? |
00
|
|
|
#7 | ||
|
Invité(e)
Messages : n/a ![]() |
Je reviens sur ce fil
1) J'ai choisi d'utiliser TIMESTAMP au lieu de DATETIME car on ne peut avoir une valeur par défaut CURRENT_DATE pour DATETIME!! Pour TIMESTAMP quand on insère NULL c'est automatiquement du CURRENT_TIMESTAMP donc il n'est pas nécessaire de mentionner un DEFAULT pour lui 2) Pour mon champ MODIFDATE, j'ai écrit le trigger suivant qui ne marche pas: Code :
Error Code : 1442 Can't update table 'table1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. |
||
00
|
|
|
#8 | ||
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Je n'ai jamais trop testé les triggers sous MySQL, mais je ne suis pas sûr que tu aies besoin de passer par un UPDATE.
Essaie comme ça : Code :
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
||
|
|
00
|
|
|
#9 | ||||
|
Invité régulier
![]() Inscription : octobre 2008 Messages : 14 ![]() |
Salut à tous,
J'ai le même besoin. Je dois créer 2 champs d'audit dans les tables que j'ai créées (un champ date de création et un champ date de modification) Pour cela je souhaiterais créer un trigger par table. Mais je n'arrive pas à voir ce qui ne marche pas dans mon script. Le voici : Code :
Citation:
Citation:
Par avance, merci beaucoup de votre aide. Mouhsine T. |
||||
|
|
00
|
|
|
#10 |
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Sans aller trop loin, le début de syntaxe du trigger ne va pas.
Il faut un trigger par évènement : un pour l'INSERT, un pour l'UPDATE et non pas un trigger INSERT OR UPDATE. Lien vers la documentation MySQL sur les déclencheurs : http://dev.mysql.com/doc/refman/5.0/...e-trigger.html
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Inscription : octobre 2008 Messages : 14 ![]() |
Merci Ced pour ta réponse.
J'ai oublié de précisé que c'est sous Oracle. La syntaxe est correcte selon la documentation d'Oracle. Si tu connais une rubrique "Oracle" dans Developpez.net je prends. Merci encore. |
|
|
00
|
|
|
#12 |
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Désolé, je ne connais pas Oracle.
Il faut que tu poses la question dans le forum d'Oracle, pour avoir plus de chances d'obtenir une réponse.
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com