Beim Ausführen einer gespeicherten Funktion oder eines Triggers in MySQL kann der Fehler auftreten:
Error: Can't update table 'brandnames' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Dieser Fehler tritt auf, wenn versucht wird, eine Tabelle aus einer gespeicherten Funktion oder einem gespeicherten Trigger heraus zu aktualisieren, was aufgrund möglicher Deadlocks oder unendlicher Rekursivität nicht möglich ist Aufrufe.
Der INSERT-Trigger, wie der bereitgestellte:
CREATE TRIGGER `capital` AFTER INSERT ON `brandnames` FOR EACH ROW UPDATE brandnames SET bname = CONCAT( UCASE( LEFT( bname, 1 ) ) , LCASE( SUBSTRING( bname, 2 ) ) )
versucht, die Markennamentabelle zu aktualisieren, während der INSERT-Vorgang noch aktiv ist. MySQL verhindert dies, um die Datenintegrität aufrechtzuerhalten und potenzielle Fehler zu vermeiden.
Um dieses Problem zu beheben, sollten Sie die folgenden Methoden in Betracht ziehen:
Zum Beispiel aktualisiert der folgende Trigger die Spalte „small_name“ basierend auf Werten in der Spalte „full_name“:
CREATE TRIGGER `capital` BEFORE INSERT ON `brandnames` FOR EACH ROW BEGIN SET NEW.small_name = CONCAT(UCASE(LEFT(NEW.full_name,1)) , LCASE(SUBSTRING(NEW.full_name,2))) END
Das obige ist der detaillierte Inhalt vonWarum blockiert MySQL Tabellenänderungen in gespeicherten Funktionen und Triggern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!