Gatilho do MySQL em events Insert / Update

Então eu tenho duas mesas assim …

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

Eu estou tentando criar um gatilho que irá:

  • atualize ext_words_count.count quando ext_words.word for atualizado.

Para complicar ainda mais as coisas,

  • Se ext_words.word não existir em ext_words_count quando as ext_words forem atualizadas, eu gostaria de inseri-las em ext_words_count e configurar count as 1.

Eu tenho olhado para questões semelhantes:
1. Antes / depois de inserir o gatilho usando o campo de incremento automático e
2. Usando o Trigger para atualizar a tabela em outro database
tentando combinar o 2. Aqui está o que eu tenho até agora:

 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 ; 

Qualquer conselho e direção é muito apreciado. Ou possivelmente outro método que eu tenha esquecido e como sempre obrigado antecipadamente!

ATUALIZAR:
Eu optei por usar 2 gatilhos, um para INSERT e um para UPDATE porque não estou familiarizado com instruções condicionais no 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 ; 

e

 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 ; 

A consulta INSERT está funcionando muito bem, mas a consulta UPDATE não está atualizando word_count . Existe algo que eu perdi na consulta de atualização ..?

Com a ajuda perfeita de Grijesh e sua sugestão de usar declarações condicionais, consegui obter um gatilho que faz as duas tarefas. Mais uma vez obrigado 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; 

evitar o uso de palavras-chave como contar como é usado pelo método sql algum tempo seu erro de criação, mas alguns corre bem

 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 ; 
Intereting Posts