Heim > Fragen und Antworten > Hauptteil
Ich habe eine Join-Tabelle mit 2 Tabellen (A und C) mit n:m-Beziehung. Die Join-Tabelle (B) enthält auch einige Informationen.
A ----- B ------ C
In Tabelle A habe ich eine Spalte „when_modified“, die ich immer auf dem neuesten Stand halten möchte, wenn sich etwas ändert. Dies sollte Änderungen an Tabelle B beinhalten.
Ich habe also einen Pre-Update-Trigger für Tabelle B mit der folgenden Abfrage
UPDATE A SET when_modified = NOW() WHERE id = NEW.id;
Das Problem ist, wenn ich jetzt eine Update-Abfrage ausführe (Join auf B), erhalte ich die folgende Fehlermeldung
Tabelle „A“ in einer gespeicherten Funktion/einem gespeicherten Trigger kann nicht aktualisiert werden, da sie bereits von einer Anweisung verwendet wird, die diese gespeicherte Funktion/diesen gespeicherten Trigger aufruft.
Update B vv JOIN A v on vv.id = v.id SET vv.block = 1 WHERE v.status = 'finished'
P粉9501288192023-09-15 09:46:17
您需要重写 UPDATE 语句。
您不能在触发器中进行更新,否则可能会发生这种情况。无限循环
但是简单的改变就会产生同样的效果
CREATE TABLE A (id int, status varchar(10), when_modified datetime)
INSERT INTO A VALUES (1,'finished',now())
CREATE TABLE B (id int, block int)
INSERT INTO B VALUES(1,0)
Update B vv JOIN A v on vv.id = v.id SET vv.block = 1, v.when_modified = NOW() WHERE v.status = 'finished'
SELECT * FROM A