IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Détection d'une mise à jour de table


Sujet :

Requêtes MySQL

  1. #1
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut Détection d'une mise à jour de table
    Bonjour,

    MySql fait-il une mise à jour d'un enregistrement d'une table même si l'update que l'on exécute ne change rien au contenu de la table.

    Si non (youpi) existe-t-il un code retour permettant de savoir s'il y a eu mise à jour ou pas de la table ?

    Merci pour votre aide

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Bonjour,
    Bonjour

    MySql fait-il une mise à jour d'un enregistrement d'une table même si l'update que l'on exécute ne change rien au contenu de la table.
    Il me semble que oui mais je peux me tromper

    Si non (youpi) existe-t-il un code retour permettant de savoir s'il y a eu mise à jour ou pas de la table ?
    ---

    Merci pour votre aide
    Derien

  3. #3
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Citation Envoyé par David55 Voir le message
    Il me semble que oui mais je peux me tromper
    Comme ce serait dommage.

    Je continue de chercher

  4. #4
    Membre averti

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Points : 351
    Points
    351
    Par défaut
    Bonjour,
    Un peu étrange votre question, je crois qu'il faudrait nous indiquer plus d'informations pour savoir quelles sont vos raisons profondes de faire cela.
    En effet, rien ne vous empêche lors de l'update de contrôler la valeur et vérifier si celle ci est différente ou non. Vous pouvez alors par exemple modifier une colonne "date_modification", ce qui vous indiquera qu'il y a eu une modification.
    Sinon, vous pouvez utiliser un trigger, qui fera ça automatiquement en arrière plan.

  5. #5
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Bonjour,

    Je gère des logs des requêtes qui ont eu un impact sur la base de données.

    Hors actuellement que l'utilisateur ai ou non fait une modif sur un formulaire et qu'il clique sur valider au lieu de retour, un update se fait et un enregistrement de la requête exécutée est enregistré dans les logs.

    Cet enregistrement est inutile et perturbant sur les véritables modifications de la base de données.

    Donc en sachant s'il y a eu update ou pas, je peux gérer l'enregistrement des logs.

    Je ne connais pas les triggers. Je vais regarder ça.

  6. #6
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Après recherche et lecture sur les triggers j'ai l'impression que je doive faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TRIGGER ma_table_modifie
    AFTER UPDATE ON ma_table
    FOR EACH ROW
    BEGIN
        IF OLD.champ1!=NEW.champ1 
        or OLD.champ2!=NEW.champ2
        or OLD.champ3!=NEW.champ3 ... then
            INSERT INTO log_table(A,B,C) values (...,....,...);
        END IF
    END
    Je me lance, j'essaye

  7. #7
    Membre averti

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Points : 351
    Points
    351
    Par défaut
    Bonjour,
    Cela me semble bon pour le trigger mais je me demande pourquoi vous ne gérez pas cela en aval du coté du formulaire, de cette façon vous ne surchargez pas votre serveur de base de données en lui envoyant un ordre inutile. Si c'est un client léger vous devriez même pouvoir faire cela en javascript et ainsi décharger la charge coté client.
    Bon courage

  8. #8
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Citation Envoyé par patic Voir le message
    Bonjour,
    Cela me semble bon pour le trigger mais je me demande pourquoi vous ne gérez pas cela en aval du coté du formulaire, de cette façon vous ne surchargez pas votre serveur de base de données en lui envoyant un ordre inutile. Si c'est un client léger vous devriez même pouvoir faire cela en javascript et ainsi décharger la charge coté client.
    Bon courage
    Merci Patic pour cette piste.

    Cela reviendrait donc à avoir chaque champ du formulaire doublé en hidden, puis une fonction faisant la comparaison de chaque champ hidden avec le champ du formulaire lorsqu'il y a modification d'un champ de formulaire et d'activer un marqueur disant qu'une valeur est modifiée.

    J'ai bien suivi ?

  9. #9
    Membre averti

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Points : 351
    Points
    351
    Par défaut
    J'imagine qu'il s'agit d'un client léger en html.
    Je ne suis pas assez calé pour vous donner un exemple détaillé de script. Cependant, d'abord il serait préférable que le formulaire soit déjà rempli par les valeurs existantes dans vos champs 'input' avec la propriété 'value' (dans le cas d'une modification bien sûr). Ensuite avec l'aide de javascript qui aurait au préalable enregistré les valeurs initiales vous contrôlez que les valeurs des champs changent. Soit vous le faites au moment de la validation du formulaire (bouton valider par ex), soit vous le faites à chaque fois qu'un des champs est modifié (lorsqu'il perd le contrôle), dans ce dernier cas vous désactivez le bouton valider tant qu'un des champs n'est pas modifié.
    Si vous le faites du coté serveur, soit vous envoyez les valeurs initiales en même temps pour les comparer (dans ce cas des champs cachés feront l'affaire), soit vous refaites une requête select avant l'éventuel update.
    Juste pour m'assurer, on est bien d'accord que vous faites la requête update seulement s'il y a eu une modification, sinon vous n'avez rien besoin de faire, ni l'update, ni l'enregistrement du log, le serveur de bdd n'est ainsi pas sollicité.
    Si vous vous orientez vers une solution coté applicatif je vous invite à délester votre message sur le forum approprié (php ou autres).
    Bon courage

  10. #10
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Patic,

    On s'est bien compris sur ce que je souhaite faire.

    Maintenant, que vaut-il mieux charger.
    - Le serveur de données (MySql)
    - Le poste client (Javascript)
    - Le serveur de traitement (PHP)

  11. #11
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Le mieux pour l'intégrité des données est le niveau mysql. Il faut un serveur de données bien dimensionné et tout ira bien.

    Merci

  12. #12
    Membre averti

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Points : 351
    Points
    351
    Par défaut
    Je n'ai pas assez d'expérience pour donner LA réponse, d'autant qu'il faut à mon avis prendre en compte l'environnement globale de l'application (matériel, nombre de client, etc). Il n'y a pas à proprement parlé de problème d'intégrité ici, le seul problème que j'identifie est s'il y a des accès concurrents. On peut imaginer que le premier client est en cours de modification et qu'un deuxième client arrive est fait une modification plus rapidement, le premier ne verra pas la modification du second ...

  13. #13
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Dans ce cas précis il n'est pas question d'intégrité de données.

    Soit, mais il est bon de bien partir dans les développements et je vois trop souvent des lignes de codes pour compenser une architecture et une technologie mal maîtrisée sur la gestion des base de données.

    De plus je suis sur que quelque soit le script qui fera un update sur une table ayant un trigger, le trigger s'activera.

    Donc pas d'oublie possible de la part du programmeur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'une mise à jour de table
    Par larbiket dans le forum JDBC
    Réponses: 2
    Dernier message: 29/07/2013, 07h31
  2. comment faire une Mise à jour de table de fait ?
    Par jerada dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 29/12/2011, 12h02
  3. Réponses: 4
    Dernier message: 11/07/2007, 16h23
  4. Détection d'une mise à jour faite avec VB
    Par vcattin dans le forum Access
    Réponses: 2
    Dernier message: 28/12/2006, 08h47
  5. recuperation de la date d'une mise à jour d'une table
    Par freestyler1982 dans le forum Oracle
    Réponses: 4
    Dernier message: 09/09/2006, 15h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo