Есть ли возможность использовать триггер "после обновления" только в том случае, если данные были ДЕЙСТВИТЕЛЬНО изменены. Я знаю о "НОВЫХ и СТАРЫХ". Но при их использовании я могу сравнивать столбцы. Например, "NEW.count < > OLD.count".
Но мне нужно что-то вроде: запустить триггер, если "NEW < > OLD"
Пример:
create table foo (a INT, b INT);
create table bar (a INT, b INT);
INSERT INTO foo VALUES(1,1);
INSERT INTO foo VALUES(2,2);
INSERT INTO foo VALUES(3,3);
CREATE TRIGGER ins_sum
AFTER UPDATE ON foo
FOR EACH ROW
INSERT INTO bar VALUES(NEW.a, NEW.b);
UPDATE foo SET b = 3 WHERE a=3;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
select * from bar;
+------+------+
| a | b |
+------+------+
| 3 | 3 |
+------+------+
Дело в том, что было обновление, но ничего не изменилось. Но спусковой механизм все равно. ИМХО должно быть так, как нет.
Я знаю, что я мог бы использовать
IF NOW.b < > OLD.b
для этого примера.
НО представьте себе большую таблицу с меняющимися столбцами. Вы должны сравнить каждый столбец, и если в базе данных изменится настройка триггера. И не "хорошо" сравнивать каждый столбец строки с жестким кодом:)
Добавление
Как вы можете видеть на линии
Соответствие строк: 1 Изменено: 0 Предупреждения: 0
MySQL знает, что строка не изменилась. Но он не делится этими знаниями с помощью триггера. Триггер типа "ПОСЛЕ РЕАЛЬНОГО ОБНОВЛЕНИЯ" или что-то в этом роде будет круто.