Déclencheurs MySQL pour une manipulation efficace des données dans les scénarios d'insertion/mise à jour
Considérez deux tableaux : ext_words et ext_words_count. L'objectif est de créer un déclencheur qui maintient le nombre de mots dans ext_words_count chaque fois que la table ext_words est mise à jour.
Pour cette tâche, vous avez initialement tenté d'utiliser un seul déclencheur :
DELIMITER $$ CREATE TRIGGER update_count AFTER UPDATE ON ext_words FOR EACH ROW BEGIN UPDATE ext_words_count SET word_count = word_count + 1 WHERE word = NEW.word; END; $$ DELIMITER ;
Cependant, ce déclencheur ne tenait pas compte du cas où le mot mis à jour n'existait pas dans ext_words_count. Pour résoudre ce problème, vous avez envisagé d'utiliser des déclencheurs distincts pour les opérations d'insertion et de mise à jour :
DELIMITER $$ CREATE TRIGGER insert_word AFTER INSERT ON ext_words FOR EACH ROW BEGIN INSERT IGNORE INTO ext_words_count (word) VALUES (NEW.word); END; $$ DELIMITER ; DELIMITER $$ CREATE TRIGGER update_word AFTER UPDATE ON ext_words FOR EACH ROW BEGIN UPDATE ext_words_count SET word_count = word_count + 1 WHERE word = NEW.word; END; $$ DELIMITER ;
Malgré le bon fonctionnement du déclencheur d'insertion, le déclencheur de mise à jour n'a toujours pas réussi à incrémenter le nombre.
En fin de compte, vous découvert une solution alternative utilisant des instructions conditionnelles dans un seul déclencheur :
DELIMITER $$ CREATE TRIGGER update_count AFTER INSERT ON ext_words FOR EACH ROW BEGIN IF NOT EXISTS (SELECT 1 FROM ext_words_count WHERE word = NEW.word) THEN INSERT INTO ext_words_count (word) VALUES (NEW.word); ELSE UPDATE ext_words_count SET word_count = word_count + 1 WHERE word = NEW.word; END IF; END $$ DELIMITER;
Ce déclencheur vérifie si le mot mis à jour existe dans ext_words_count. Sinon, il insère le mot dans le tableau. Sinon, il incrémente le nombre de mots correspondant. En tirant parti des instructions conditionnelles, vous pouvez désormais maintenir efficacement le nombre de mots à l'aide d'un seul déclencheur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!