|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||
|
Inscrit
Inscription : décembre 2004 Messages : 317 ![]() |
Salut !
Je commence à faire des triggers sous MySQL5, et je rencontre un petit problème. Le voici : J'ai une table, 3 colonnes, les 2 premières forment une clé unique J'ai une trigger qui, lors d'un update, supprime les lignes où la 3e colonne est à 0 (zero) Lorsque j'exécute cette requete : Code :
UPDATE gp_unt SET unt_nb = 0 WHERE unt_iuntid = 1 AND unt_legid = 1 Citation:
Code :
Code :
Visiblement, il aime pas parce qu'il veut supprimer une ligne sur laquelle il est en train de travailler si j'ai bien compris. Mais comment lui dire qu'il doit quand même le supprimer ? Dans le trigger il y a bien "__AFTER__ UPDATE". Donc il devrait faire son update et ensuite le trigger, à savoir la suppression. Je comprend pas trop le comportement de MySQL là. Merci de m'éclairer ! PS : remplacez le "SET unt_nb = 0" par "SET unt_nb = unt_nb - 15" (où 15 est la valeur précédente de unt_nb, mais ca je le sais pas) pour comprendre pourquoi je ne fais pas un DELETE directement PS2 : c'est mon unique trigger |
|||||
|
00
|
|
|
#2 | |
|
Membre actif
![]() Inscription : septembre 2003 Messages : 374 ![]() |
Citation:
c'est un controle statique(*), qui verifie qu'il n'y ai pas de redondance cyclique. (*) static : dans le sens ou il ne cherche pas a comprendre ta requete, il vois simplement que des que ta table va être modifié il va declancher le trigger qui va modifier la même table qui va declancher le trigger qui va modifier qui va declancher qui va modifier qui va .... (bon j'arrete là, vous avez compris |
|
|
|
00
|
|
|
#3 |
|
Inscrit
Inscription : décembre 2004 Messages : 317 ![]() |
Bah le truc c'est que mon trigger est un "AFTER UPDATE" et qu'il exécute un "DELETE".
Donc l'exécution du trigger ne va rien déclencher du tout car je n'ai pas d'autre trigger (pas de "AFTER DELETE") ! Il y a bien une solution d'esquive ? |
|
00
|
|
|
#4 | |
|
Membre actif
![]() Inscription : septembre 2003 Messages : 374 ![]() |
Je ne suis pas sur, mais j'ai cru lire il y a tres longtemps qu'il ne fallais pas confondre le UPDATE qui est dans le trigger et le UPDATE de l'ordre SQL.
en gros, le trigger UPDATE n'est psa lancé QUE sur les ordre UPDATE. Citation:
Ensuite, est-ce qu'il sont aussi lancé sur les DELETE ? il semble que non d'apres la doc... |
|
|
|
00
|
|
|
#5 |
|
Inscrit
Inscription : décembre 2004 Messages : 317 ![]() |
Ah une bonne chose à savoir ca.
Mais bon je ne vois nul part que DELETE est considéré comme un UPDATE pour les triggers :/ Pour en revenir à mon problème, comment je pourrais faire pour ne pas avoir de colonne à zero sans mettre une série de test coté application ? Si il me refuse mon trigger je vois pas trop là :/ |
|
00
|
|
|
#6 |
|
Membre actif
![]() Inscription : septembre 2003 Messages : 374 ![]() |
En effet rien n'indique de le DELETE declanche le trigger autant pour moi.
Mais visiblement (d'apres le message d'erreur qui est explicite) il ne veux pas que tu touche a la table qui a declanché le trigger... peut être dans une version ulterieur ? sinon, bah... comme tu l'as dis : dans l'application. ou peut être... simplement faire une procédure stocké que tu appelerait a la place de l'UPDATE. Et dans cette procedure tu fait l'update, suivis du delete. non ? |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com