Déclencheurs MySQL pour les événements d'insertion/mise à jour
Scénario :
Considérez deux tableaux, ext_words et ext_words_count, où ext_words stocke les mots et ext_words_count suit le nombre de chaque mot dans ext_words. Le but est de créer un déclencheur qui :
Tentative initiale :
Le déclencheur initial proposé, qui ne gère que les mises à jour, est le suivant :
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 met uniquement à jour les mots existants dans ext_words_count et ne parvient pas à en insérer de nouveaux mots.
Approche mise à jour avec des instructions conditionnelles :
À l'aide d'instructions conditionnelles, il est possible de combiner les opérations d'insertion et de mise à jour en 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 évalue si le mot existe déjà dans ext_words_count. Si ce n'est pas le cas, le déclencheur insère le mot ; sinon, il met à jour le décompte. Le déclencheur est exécuté après chaque opération d'insertion sur la table ext_words.
Considérations supplémentaires :
Pour gérer les insertions, un déclencheur distinct pour l'opération INSERT est également recommandé :
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 ;
Ce déclencheur insère simplement le mot dans ext_words_count sans se demander s'il existe déjà. L'instruction INSERT IGNORE garantit que les insertions en double sont ignorées.
Conclusion :
En combinant les déclencheurs d'insertion et de mise à jour ou en utilisant un seul déclencheur avec des instructions conditionnelles, il est possible pour implémenter la fonctionnalité souhaitée pour garder une trace du nombre de mots dans les tables MySQL.
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!