2015-04-30 2 views
1

je tentais de déclencher une mise à jour chatroompost.view de 1 à 0 lors de la mise à jour est arrivé et chatroompost.likecount <= -5obtenu Erreur 1442 en essayant de déclencher la mise à jour

CREATE TRIGGER `chatroompost_AFTER_UPDATE` 
AFTER UPDATE ON `chatroompost` 
FOR EACH ROW BEGIN 
    IF (NEW.likecount <= -5) THEN 
     UPDATE `chatroompost` SET NEW.`view`='0' WHERE `chatroompost`.`idchatroompost` = OLD.`idchatroompost`; 
    END IF; 
END $$ 
DELIMITER ; 

La requête:

UPDATE `chatroompost` SET likecount='-11' WHERE idchatroompost=1; SELECT *FROM chatroompost; 

mais je suis

Code d'erreur: 1442. Impossible de mettre à jour la table 'chatroompost' dans la fonction/le déclencheur mémorisé car elle est déjà utilisée par l'état nt qui a invoqué cette fonction/déclencheur mémorisé.

J'ai essayé de REPLACE tous les AFTER-BEFORE mais toujours obtenu la même erreur.

+0

http://stackoverflow.com/questions/12203859/mysql-trigger-cannot-update-table-getting-error-1442 – Sush

+0

je Tring pour déclencher une mise à jour de chatroompost.view de 1 à 0 quand update happend et chatroompost.likecount <= - 5 mais j'ai le code d'erreur: 1442. Impossible de mettre à jour la table 'chatroompost' dans la fonction/trigger stockée car elle est déjà utilisée par une déclaration qui a appelé cette fonction/déclencheur stocké. J'ai essayé de remplacer tous les AFTER à AVANT mais toujours eu le même 1442. – user3916122

+0

Avez-vous vérifié le lien ci-dessus? – Sush

Répondre

0

Solution: faites-en un déclencheur BEFORE UPDATE ON et utilisez l'opérateur NEW, cela fera l'affaire.

DROP TRIGGER IF EXISTS`chatroompost_AFTER_UPDATE` ; 
DELIMITER $$ 
use mydb $$ 

CREATE TRIGGER `chatroompost_AFTER_UPDATE` 
BEFORE UPDATE ON `chatroompost` 
FOR EACH ROW BEGIN 
    IF (NEW.likecount <= -5) THEN 
     NEW.view='0'; 
    END IF; 
END $$ 
DELIMITER ; 

cause: Vous ne pouvez pas mettre à jour une table (chatroompost) où le déclencheur est invoqué:

Au sein d'une fonction stockée ou un déclencheur, il est interdit de modifier une table qui est déjà étant utilisé (pour la lecture ou l'écriture) par l'instruction qui a appelé la fonction ou le déclencheur.

Cela va générer l'erreur 1442:

Error Code: 1442 
Can't update table 'chatroompost' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.