Есть ли любая возможность использовать "после обновления" триггер только в случае, данные были ДЕЙСТВИТЕЛЬНО изменены. Я знаю о "НОВОМ и СТАРОМ". Но при использовании их я только могу сравнить столбцы. Например, "NEW.count <> OLD.count".
Но я хочу что-то как: выполненный триггер, если "НОВЫЙ <> СТАРЫЙ"
Пример:
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 |
+------+------+
Точка, было обновление, но ничто не изменилось. Но триггер работал так или иначе. По моему скромному мнению, должен быть способ, которым это не делает.
Я знаю, что, возможно, использовал
ЕСЛИ NOW.b <> OLD.b
для этого примера.
НО вообразите большую таблицу с изменяющимися столбцами. Необходимо сравнить каждый столбец и если изменения базы данных необходимо скорректировать триггер. И не "чувствует себя" хорошим сравнить каждый столбец строки hardcoded :)
Дополнение
Поскольку Вы видите на строке
Строки соответствовали: 1 Измененный: 0 Предупреждений: 0
MySQL знает, что строка не изменилась. Но это не делится этими знаниями с триггером. Триггер как "ПОСЛЕ РЕАЛЬНОГО ОБНОВЛЕНИЯ" или что-то вроде этого было бы прохладно.