Триггер MySQL Включение/обновление событий
Итак, у меня есть две таблицы, подобные этой...
ext_words
-------------
| id | word |
-------------
| 1 | this |
-------------
| 2 | that |
-------------
| 3 | this |
-------------
ext_words_count
---------------------
| id | word | count |
---------------------
| 1 | this | 2 |
---------------------
| 2 | that | 1 |
---------------------
Я пытаюсь создать триггер, который будет:
- update
ext_words_count.count
при обновлении ext_words.word
.
Чтобы еще больше усложнить ситуацию,
- Если
ext_words.word
не существует в ext_words_count
, когда обновляется ext_words
, я хотел бы вставить его в ext_words_count
и установить count
как 1.
Я рассматривал похожие вопросы:
1. До/после запуска триггера с использованием поля автоматического увеличения и
2. Использование Trigger для обновления таблицы в другой базе данных
пытаясь объединить 2. Вот что я до сих пор:
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 ;
Приветствуются любые советы и указания. Или, возможно, другой метод, который я забыл и как всегда заблаговременно заблаговременно!
UPDATE:
Я выбрал использование двух триггеров, один для INSERT и один для UPDATE, потому что я не знаком с условными операторами 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 ;
и
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 ;
Запрос INSERT работает отлично, однако запрос UPDATE не обновляет word_count
. Есть что-то, что я пропустил в запросе обновления.?
Ответы
Ответ 1
С полной поддержкой Grijesh и его предложением использовать условные утверждения я смог получить триггер ONE, который выполняет обе задачи. Еще раз спасибо 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;
Ответ 2
избегать использования ключевых слов, таких как count, поскольку его используется методом sql
некоторое время его создает ошибку, но некоторые работают хорошо
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 ;