MySQL Trigger после обновления, только если строка изменилась

Есть ли любая возможность использовать "после обновления" триггер только в случае, данные были ДЕЙСТВИТЕЛЬНО изменены. Я знаю о "НОВОМ и СТАРОМ". Но при использовании их я только могу сравнить столбцы. Например, "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 знает, что строка не изменилась. Но это не делится этими знаниями с триггером. Триггер как "ПОСЛЕ РЕАЛЬНОГО ОБНОВЛЕНИЯ" или что-то вроде этого было бы прохладно.

62
задан 9 June 2011 в 21:43

0 ответов

Другие вопросы по тегам:

Похожие вопросы: