Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/04/2011, 22h35   #1
Lucas Panny
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Par défaut Historisation des données d'une BD en ajoutant 2 champs datetime

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
  Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 12h32   #2
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
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
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 13h56   #3
Lucas Panny
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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?
  Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 14h09   #4
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
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!
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 08h01   #5
Lucas Panny
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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?
  Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 16h37   #6
Lucas Panny
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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?
  Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 12h28   #7
Lucas Panny
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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 :
1
2
3
4
5
6
7
DELIMITER $$
 
CREATE
    TRIGGER `table1_trigger` BEFORE UPDATE ON `table1` 
    FOR EACH ROW BEGIN
	UPDATE table1 SET ModifDate = CURRENT_TIMESTAMP WHERE IdTable1 = new.IdTable1;
END$$
Le soucis lorsqu'on met à jour (update) un enregistrement c'est le message suivant:
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.
  Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 13h11   #8
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
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 :
1
2
3
4
5
6
DELIMITER $$
 
CREATE
    TRIGGER `table1_trigger` BEFORE UPDATE ON `table1` 
    FOR EACH ROW SET new.ModifDate = CURRENT_TIMESTAMP;
$$
__________________
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
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 11h10   #9
Invité régulier
 
Inscription : octobre 2008
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 14
Points : 6
Points : 6
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE OR REPLACE TRIGGER TRIGGER_F_RESERVATION
before INSERT OR UPDATE
ON RESABLUE.F_RESERVATION
FOR each row
begin
      IF inserting THEN
        INSERT INTO RESABLUE.F_RESERVATION (TECHDATECREA) VALUES (sysdate) 
        ELSE 
          IF updating THEN
            INSERT INTO RESABLUE.F_RESERVATION (TECHDATEMOD) VALUES (sysdate)
          END IF;
      END IF;
END ;
L'erreur que j'obtiens :
Citation:
Elément TRIGGER TRIGGER_F_RESERVATION compilé
Errors: check compiler log
Compilateur - Journal :


Citation:
Projet : sqldev.temp:/IdeConnections%23DWH_DEV.jpr

DWH_DEV

Erreur(3,9): PL/SQL: SQL Statement ignored

Erreur(4,9): PL/SQL: ORA-00933: la commande SQL ne se termine pas correctement
Pouvez-vous me dire ce qui ne va pas s'il vous plait ?

Par avance, merci beaucoup de votre aide.

Mouhsine T.
oualidifornie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 11h21   #10
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
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
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 11h28   #11
Invité régulier
 
Inscription : octobre 2008
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 14
Points : 6
Points : 6
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.
oualidifornie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 12h38   #12
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
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
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h53.


 
 
 
 
Partenaires

Hébergement Web