Trigger empechant des inserts

Trigger empechant des inserts - SQL/NoSQL - Programmation

Marsh Posté le 13-05-2014 à 11:10:44    

Bonjour,
 
J'ai un problème avec mon trigger (en Mysql) ..  
Je rempli une table A automatiquement via Rsyslog, et tous fonctionne parfaitement.
 
Jai crée un trigger qui après chaque nouveau insert dans la table A, rempli une autre table B, mais le problème est que certains inserts qui se font normalement sans triggers ne se font plus dès lors que ce trigger "est en marche". De plus j'ai remarqué que l'auto_increment de la table A "sautait" de 1000 en 1000 parfois sans raison..
 
Savez-vous d'où cela peut venir ?? D'un coté ce problème n'apparait que si le trigger tourne mais de l'autre c'est bien un after insert, c'est pourquoi je comprends pas pourquoi ca empeche ces inserts dans ma table A :/
 
Merci pour votre aide :)

Reply

Marsh Posté le 13-05-2014 à 11:10:44   

Reply

Marsh Posté le 13-05-2014 à 11:55:29    

Tu n'aurais pas un écriture transactionnelle? qui "merdouillerait"?


---------------
mieux vaut être un con au chaud, qu'un con gelé lol
Reply

Marsh Posté le 13-05-2014 à 12:00:56    

gpl73 a écrit :

Tu n'aurais pas un écriture transactionnelle? qui "merdouillerait"?


 
Salut, non je n'ai faite aucune transaction. J'ai essayé before insert au cas ou, mais sans succès non plus  :??:

Reply

Marsh Posté le 13-05-2014 à 13:36:36    

aie... j'avais eu un truc pareil (mais c'était pas avec Mysql... )et c'était lié à un controle de validation...
Est ce que en Mysql, toutes tes tables sont journalisées "systêmatiquement"?
Que disent tes log?
Tu as le source de ton trigger?
Est ce que des contraintes (référentielles et autre) existent sur la seconde table, lié à l'enregistrement que tu écris?
 
 
 


---------------
mieux vaut être un con au chaud, qu'un con gelé lol
Reply

Marsh Posté le 13-05-2014 à 13:54:34    

Citation :

Est ce que en Mysql, toutes tes tables sont journalisées "systêmatiquement"?


Qu'entends tu par là?

Citation :

Que disent tes log?


Effectivement, certaines fois, ma table A execute le trigger en boucle (pendant 1 minute environ) sur la meme ligne !!
 

Citation :

Tu as le source de ton trigger?


Mon trigger est sous cette forme:

Code :
  1. CREATE TRIGGER after_insert
  2. AFTER INSERT ON Syslog.SystemEvents
  3. FOR EACH ROW
  4. BEGIN
  5. IF (....) THEN
  6. INSERT INTO table_B....
  7. ELSEIF (....) THEN
  8. UPDATE table_B ....
  9. ELSEIF (....) THEN
  10. INSERT INTO table_B ....
  11. ELSEIF (......) THEN
  12. UPDATE table_B ....
  13. END IF;
  14. END|


Citation :

Est ce que des contraintes (référentielles et autre) existent sur la seconde table, lié à l'enregistrement que tu écris?


Pas de soucis de se coté la..

 

Merci de ton aide :)


Message édité par ifr38 le 13-05-2014 à 14:08:48
Reply

Marsh Posté le 13-05-2014 à 14:09:42    

Si tout est OK, concernant ta base de données... c'est que cela vient de ton trigger :)
Essaies d'écrire dans une table "bidon", ce que tu viens d'écrire dans ta table 1 et /ou le pendant dans ta table 2...
regardes après ce qui n'est pas renseignée...
 
Si tu peux aussi, c'est ecrire dans une autre table "bidon2" le SQLSTATE que tu a intercepté après chaque insertion et ou update...
 
Une question "conne", tu travailles bien avec les bonnes (nouvelles) valeurs de ton enregistrement?


---------------
mieux vaut être un con au chaud, qu'un con gelé lol
Reply

Marsh Posté le 13-05-2014 à 14:28:26    

Ma table A se remplit normalement si le trigger n'est pas là, c'est dès que le trigger est 'enclenché' que ça beug...
 
Je vais suivre ce que tu m'a dis et essayé de déboguer pour trouver d'où vient le problème..  
Actuellement ma table A se remplit à raison d'une ligne toutes les 7 secondes environ.. Si le trigger est là il va se bloquer sur une ligne et la table A ne se remplira pas pendant 1 minute :(

Reply

Marsh Posté le 14-05-2014 à 10:00:38    

Mon problème est résolu.
 
Après plusieurs tests, je me suis rendu compte qu'une de mes requêtes pouvait retourner plusieurs résultats alors que le update attendait un id unique..  
J'ai rajouté un ORDER BY id ASC LIMIT 1 pour ne garder que le premier de ses résultats.  
 
Merci pour l'aide!

Reply

Marsh Posté le 14-05-2014 à 11:55:24    

Bonne nouvelle pour les triggers.
:bounce:


---------------
mieux vaut être un con au chaud, qu'un con gelé lol
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed