update trigger para insertar for before after mysql triggers insert insert-update

trigger - Activador de MySQL en eventos de inserción/actualización



trigger mysql insert (2)

Entonces tengo dos mesas como esta ...

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

Estoy tratando de crear un disparador que:

  • actualice ext_words_count.count cuando ext_words.word esté actualizado.

Para complicar aún más las cosas,

  • si ext_words.word no existe en ext_words_count cuando ext_words está actualizado, me gustaría insertarlo en ext_words_count y configurar el count como 1.

He estado viendo preguntas similares:
1. Disparador de inserción antes / después usando el campo de incremento automático , y
2. Usando Trigger para actualizar la tabla en otra base de datos
tratando de combinar el 2. Esto es lo que tengo hasta ahora:

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 ;

Cualquier consejo y dirección es muy apreciado. O posiblemente otro método que he pasado por alto y como siempre ¡gracias de antemano!

ACTUALIZAR:
He optado por utilizar 2 disparadores, uno para INSERT y otro para UPDATE porque no estoy tan familiarizado con las declaraciones condicionales en 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 ;

y

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 consulta INSERT funciona bien, sin embargo, la consulta UPDATE no actualiza word_count . ¿Hay algo que omití en la consulta de actualización ...?


Con la ayuda perfecta de Grijesh y su sugerencia de usar declaraciones condicionales, pude obtener UN gatillo que realiza ambas tareas. Gracias otra vez 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;


evite el uso de palabras clave como count, ya que es usado por el método sql, en algún momento se crea un error, pero algunas se ejecutan 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 ;