Maison  >  Article  >  base de données  >  Comment maintenir efficacement le nombre de mots à l'aide des déclencheurs MySQL dans les scénarios d'insertion/mise à jour ?

Comment maintenir efficacement le nombre de mots à l'aide des déclencheurs MySQL dans les scénarios d'insertion/mise à jour ?

DDD
DDDoriginal
2024-11-11 22:33:03458parcourir

How to Efficiently Maintain Word Counts Using MySQL Triggers in Insert/Update Scenarios?

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!

Déclaration:
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