Ho due tabelle: comments
e comments_likes
.Creare una query in mysql senza richiamare un trigger (Come disabilitare un trigger)
commenti
id
message
likes
trigger di:
DOPO DELETE
DELETE FROM comments_likes WHERE comment_id = OLD.id;
comments_likes
id
comment_id
trigger di:
dopo l'inserimento che
UPDATE comments SET likes = likes + 1 WHERE comments.id = NEW.comment_id;
DOPO DELETE
UPDATE comments SET likes = likes - 1 WHERE comments.id = OLD.comment_id;
dopo l'aggiornamento
**omited code, updates comments**
Quindi la domanda è, posso disabilitare i trigger quando li attivazione da un altro trigger?
Quello che voglio è fare qualcosa piace questo:
DOPO DELETE
IF NOT called_from_another_trigger() THEN
UPDATE comments SET likes = likes - 1 WHERE comments.id = OLD.comment_id;
END IF;
[EDIT]
una soluzione non ottimale sarebbe (query molto lenta ... fa una query per ogni registro LIKE):
BEGIN
IF (SELECT id FROM comments WHERE comments.id = OLD.comment_id) THEN
UPDATE comments SET comments.cache_likes = comments.cache_likes - 1 WHERE comments.id = OLD.comment_id;
END IF;
END
UPDATE LOW PRIORITY
e IGNORE
non funzionano.
[EDIT 2]
Ho un'altra idea, è possibile impostare una variabile globale nel primo trigger e leggerlo dall'altro grilletto?
Es:
primo trigger:
@disable_triggers = true;
// do the stuff that calls another triggers
@disable_triggers = false;
altro trigger:
if @disable_triggers = false then
// do the stuff
end if;
Inerestante! Puoi disabilitare i trigger all'interno di un trigger? – Mchl
@Mchl: Sì, con questo metodo è possibile :) @var sono globali per la connessione. È necessario utilizzare IS NULL perché le variabili che non sono state definite sono sempre NULL. – Wiliam
questo mi ha aiutato 4 anni dopo! Ero esattamente alla ricerca di qualcosa di simile. dopo 1 ora di googling e ricerca SO, ho finalmente trovato la tua risposta. è così facile, ma non l'avrei mai capito da solo. non sono abituato a "programmare" con mysql. –