Déclencheur MySQL sur les événements Insert / Update
donc j'ai deux tables comme celle-ci...
ext_words
-------------
| id | word |
-------------
| 1 | this |
-------------
| 2 | that |
-------------
| 3 | this |
-------------
ext_words_count
---------------------
| id | word | count |
---------------------
| 1 | this | 2 |
---------------------
| 2 | that | 1 |
---------------------
j'essaie de créer un déclencheur qui va:
- mise à jour
ext_words_count.count
quandext_words.word
est mis à jour.
Pour compliquer encore les choses,
- si
ext_words.word
n'existe pas dansext_words_count
quandext_words
est mise à jour, je voudrais l'insérer dansext_words_count
et mettrecount
comme 1.
j'ai examiné des questions similaires:
1. avant / après insérer le déclencheur en utilisant la zone d'incrément automatique , et
2. utilisant Trigger pour mettre à jour la table dans une autre base de données
en essayant de combiner les 2. Voici ce que j'ai jusqu'à présent:
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 ;
tout conseil et la direction est grandement apprécié. Ou éventuellement d'une autre méthode que j'ai négligé et comme toujours, merci à l'avance!
mise à jour:
J'ai opté pour l'utilisation de 2 déclencheurs, un pour INSERT et un pour UPDATE parce que je ne suis pas familier avec les déclarations 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 INSERT fonctionne bien, cependant la mise à jour la requête ne met pas à jour word_count
. Y a - t-il quelque chose que j'ai manqué dans la requête de mise à jour?.?
2 réponses
avec L'aide parfaite de Grijesh et sa suggestion d'utiliser des déclarations conditionnelles, j'ai pu obtenir un déclencheur qui fait les deux tâches. Merci encore Grijesh
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;
éviter l'utilisation de mots-clés comme count car son est utilisé par la méthode sql un peu de temps son erreur de création, mais certains fonctionne bien
DELIMITER $$
CREATE TRIGGER update_count
AFTER UPDATE ON ext_words
FOR EACH ROW
BEGIN
SELECT count INTO @x FROM ext_words_count LIMIT 1;
UPDATE ext_words_count
SET count = @x + 1
WHERE word = NEW.word;
END;
$$
DELIMITER ;