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

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

63
задан jens 9 June 2011 в 17:43
поделиться