Heim  >  Fragen und Antworten  >  Hauptteil

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

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粉677684876P粉677684876371 Tage vor524

Antworte allen(1)Ich werde antworten

  • P粉950128819

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

    小提琴

    Antwort
    0
  • StornierenAntwort