MySQL déclencheur Sur Insérer/mettre à Jour des événements

J'ai donc deux tables comme ça...

ext_words
-------------
| id | word |
-------------
| 1  | this |
-------------
| 2  | that |
-------------
| 3  | this |
-------------

ext_words_count
---------------------
| id | word | count |
---------------------
| 1  | this |   2   |
---------------------
| 2  | that |   1   |
---------------------

Je suis en train de créer un déclencheur qui:

  • mise à jour ext_words_count.count quand ext_words.word est mis à jour.

Pour compliquer les choses,

  • si ext_words.word n'existe pas dans ext_words_count quand ext_words est mis à jour, je voudrais l'insérer dans ext_words_count et définir count 1.

J'ai été à la recherche à des questions similaires à:

1. Avant /après déclencheur d'insertion de l'utilisation de l'auto incrément de champ, et

2. À l'aide de la Gâchette pour mettre à jour la table dans une autre base de données

en essayant de combiner les 2. Voici ce que j'ai à ce jour:

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 ;

Tous les conseils et la direction est très apprécié. Ou éventuellement d'une autre méthode que j'ai négligé et comme toujours, merci d'avance!

mise à JOUR:

J'ai opté pour l'utilisation de 2 déclencheurs, l'une pour l'INSERTION et l'autre pour la mise à JOUR car je ne suis pas familier avec les instructions conditionnelles dans MySQL.

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 ;

et

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 ;

La requête d'INSERTION fonctionne très bien, cependant la mise à JOUR de la requête n'est pas mise à jour word_count. Il ya quelque chose que j'ai raté dans la requête de mise à jour..?

  • Comme vous pouvez le voir ce, MySQL Feu Déclenchement pour Insérer et mettre à Jour est-ce que ma solution a fonctionné ? Quel a été le résultat que je voudrais améliorer. Rappelez-vous que vous ne pouvez pas mettre à jour même table sur laquelle vous appelle déclencheur dans MySQL
  • Merci pour le lien! Je ne suis pas en mesure d'obtenir une réponse de fonctionner, mais c'est parce que je suis nouveau à des instructions conditionnelles dans MySQL, pas à cause de votre solution.
  • Je veux dire que quand ext_words est mis à jour, si le mot n'est pas dans ext_words_count alors je veux insérer et de le rendre le nombre 1. Sinon, si le mot est dans ext_words_count, augmenter le nombre par 1...
  • Eu de cours pour cette ma requête ne fonctionnera pas attendre...
  • J'ai une petite question ici. Si vous stockez les mots séparés par des virgules forme dans certains autres tableau comme "ceci, cela", peut-on écrire un trigger sur la table à diviser la valeur et de le stocker dans ext_words et ext_words_count?
InformationsquelleAutor Drewness | 2013-04-12