Heim > Datenbank > MySQL-Tutorial > Warum kann ich eine Tabelle innerhalb einer in MySQL gespeicherten Funktion oder eines Triggers nicht aktualisieren?

Warum kann ich eine Tabelle innerhalb einer in MySQL gespeicherten Funktion oder eines Triggers nicht aktualisieren?

Barbara Streisand
Freigeben: 2024-12-07 11:30:13
Original
789 Leute haben es durchsucht

Why Can't I Update a Table Inside a MySQL Stored Function or Trigger?

MySQL-Fehler: Aktualisierungen in gespeicherten Funktionen/Triggern verboten

Wenn Sie versuchen, eine Tabelle innerhalb einer in MySQL gespeicherten Funktion oder eines Triggers zu aktualisieren, kann dies passieren stoßen Sie auf den Fehler:

Error: Can't update table 'brandnames' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Nach dem Login kopieren

Verstehen Sie das Fehler

Dieser Fehler ist auf die Einschränkung in MySQL zurückzuführen, die das Ändern einer Tabelle während der Ausführung eines INSERT-Triggers verbietet. Solche Änderungen könnten möglicherweise zu Deadlocks oder unendlichen rekursiven Schleifen führen.

Fehler vermeiden

Um diesen Fehler zu vermeiden, ziehen Sie die folgenden Ansätze in Betracht:

  • NEU und ALT verwenden Felder:

    • Zugriff auf neue Werte innerhalb des Triggers mit der Syntax NEW.fieldname.
    • Zugriff auf alte Werte innerhalb des Triggers mit der Syntax OLD.fieldname (bei Durchführung eines UPDATE).
  • Ändern Sie den Auslöser Kontext:

    • Ändern Sie den Triggertyp von AFTER INSERT in BEFORE INSERT.
    • Verschieben Sie den Tabellenänderungscode außerhalb der gespeicherten Funktion oder des gespeicherten Triggers.

Beispiel für die Verwendung von BEFORE INSERT Auslöser:

Angenommen, Sie haben ein Feld „full_brand_name“ und müssen ein Feld „short_name“ erstellen, das die ersten beiden Buchstaben in Großbuchstaben enthält:

CREATE TRIGGER `capital` BEFORE INSERT ON `brandnames`
FOR EACH ROW BEGIN
  SET NEW.short_name = CONCAT(UCASE(LEFT(NEW.full_brand_name,1)) , LCASE(SUBSTRING(NEW.full_brand_name,2)))
END
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum kann ich eine Tabelle innerhalb einer in MySQL gespeicherten Funktion oder eines Triggers nicht aktualisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage