私はMySQL 5.5.9とInnoDBを実行しています。AFTER INSERTで実行されるテーブルを更新できません
current
フィールドがレコードが最新バージョンであるかどうかを示すバージョン付きテーブルを作成しようとしました。ような何か:
| autonumber | id | name | current
| 1 | 1 | Yes | 0
| 2 | 1 | No | 1
とにかく、私はcurrent = 0
に同じIDを持つすべてのレコードを更新しAFTER INSERT
トリガーを経由してかなり頻繁にMSSQLに、過去にこれをしませんでした。そこでここでは、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!");
を私は次のエラーを取得する:
Error Code: 1442. Can't update table 'Products' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
はこれを回避する方法はあります同様のことを達成するために?
私はロックしていません、レコードは既に更新されています。 –
あなたはそれをロックしています:)))ロックされているものを更新すると、それは動作します。行、ページ、表などのいずれかです。私が書いたように、BEFOREトリガーを試してみてください。 –