J'ai donc deux tableaux comme celui-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:
ext_words_count.count
quand ext_words.Word
Est mis à jour.Pour compliquer encore les choses,
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éfinissez count
sur 1.J'ai regardé des questions similaires:
1. Avant/après le déclenchement d'insertion à l'aide du champ d'incrémentation automatique , et
2. tilisation de Trigger pour mettre à jour la table dans une autre base de données
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 direction sont grandement appréciés. Ou peut-être une autre méthode que j'ai négligée et comme toujours merci d'avance!
MISE À JOUR:
J'ai opté pour l'utilisation de 2 déclencheurs, un pour INSERT et un pour UPDATE parce que je ne connais pas très bien 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 INSERT fonctionne très bien, mais la requête UPDATE ne met pas à jour Word_count
. Y a-t-il quelque chose que j'ai manqué dans la requête de mise à jour ..?
Avec l'aide parfaite de Grijesh et sa suggestion d'utiliser des instructions conditionnelles, j'ai pu obtenir UN déclencheur qui effectue 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 d'utiliser des mots clés comme count car il est utilisé par la méthode sql quelque temps, il crée une erreur mais certains fonctionnent 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 ;