Я использую MySQL 5.5.9 и InnoDB.
Я пытаюсь создать версионную таблицу, где поле current
указывает, является ли запись самой последней версией. Что-то вроде:
| autonumber | id | name | current
| 1 | 1 | Yes | 0
| 2 | 1 | No | 1
Во всяком случае, раньше я делал это в MSSQL довольно часто через триггер AFTER INSERT
, который обновляет все записи с одинаковым идентификатором до current = 0
. Итак, мы идем в MySQL:
DELIMITER |
CREATE TRIGGER TRIGGER_Products_UpdateEarlierVersions AFTER INSERT ON Products
FOR EACH ROW BEGIN
UPDATE Products
SET current = 0
WHERE id = new.id
AND current = 1
AND autonumber <> new.autonumber;
END;
|
Это работает нормально, но при вставке записи:
insert into Products (id, name)
values (1, "Hello SO!");
Я получаю следующую ошибку:
Код ошибки: 1442. Невозможно обновить таблицу «Продукты» в сохраненной функции / триггере, поскольку она уже используется оператором, который вызвал эту сохраненную функцию / триггер.
Есть ли способ обойти подобную вещь?