MySQL- und SQL-Einstellungen vor dem Update-Trigger. Die Aktualisierung einer anderen Tabelle/Spalte kann die Tabelle in der gespeicherten Funktion/dem gespeicherten Trigger nicht aktualisieren
P粉677684876
P粉677684876 2023-09-14 21:54:36
0
1
590

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粉677684876
P粉677684876

Antworte allen(1)
P粉950128819

您需要重写 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
id 状态 when_modified
1 完成 2023-05-15 20:31:15
SELECT * FROM B
id
1 1

小提琴

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage