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
quandext_words.word
est mis à jour.
Pour compliquer les choses,
- si
ext_words.word
n'existe pas dansext_words_count
quandext_words
est mis à jour, je voudrais l'insérer dansext_words_count
et définircount
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?
Vous devez vous connecter pour publier un commentaire.
Avec Grijesh parfait de l'aide et de sa suggestion d'utiliser les instructions conditionnelles, j'ai été en mesure d'obtenir UN déclencheur qui fait les deux tâches. Merci encore Grijesh
évitez d'utiliser des mots clés tels que le comte comme sa est utilisé par sql méthode
certains temps de créer son erreur, mais quelques pistes bien