Maison > base de données > tutoriel mysql > Comment implémenter des déclencheurs MySQL pour mettre à jour le nombre de mots dans deux tables lors des événements d'insertion et de mise à jour ?

Comment implémenter des déclencheurs MySQL pour mettre à jour le nombre de mots dans deux tables lors des événements d'insertion et de mise à jour ?

DDD
Libérer: 2024-11-19 09:14:02
original
552 Les gens l'ont consulté

How to Implement MySQL Triggers for Updating Word Counts in Two Tables on Insert and Update Events?

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 :

  • Mise à jour ext_words_count.count lorsqu'un mot dans ext_words est mis à jour.
  • Si le mot n'existe pas dans ext_words_count, l'insère dans ext_words_count et règle le décompte sur 1.

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 ;
Copier après la connexion

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 ;
Copier après la connexion

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 ;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal