Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels 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 09/05/2011, 13h38   #1
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
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
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 16h39   #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
Citation:
Bonjour,
Bonjour

Citation:
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

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

Citation:
Merci pour votre aide
Derien
__________________
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 09/05/2011, 18h59   #3
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
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
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 19h15   #4
Membre confirmé
 
Inscription : novembre 2007
Messages : 134
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 134
Points : 213
Points : 213
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.
patic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 08h35   #5
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
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.
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 09h14   #6
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
Après recherche et lecture sur les triggers j'ai l'impression que je doive faire :

Code :
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
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 12h59   #7
Membre confirmé
 
Inscription : novembre 2007
Messages : 134
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 134
Points : 213
Points : 213
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
patic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 14h39   #8
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
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 ?
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 15h02   #9
Membre confirmé
 
Inscription : novembre 2007
Messages : 134
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 134
Points : 213
Points : 213
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
patic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 15h13   #10
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
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)
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 17h36   #11
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
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
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 18h26   #12
Membre confirmé
 
Inscription : novembre 2007
Messages : 134
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 134
Points : 213
Points : 213
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 ...
patic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 09h24   #13
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
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.
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h57.


 
 
 
 
Partenaires

Hébergement Web