2016-07-08 22 views
0

Ich möchte order_key in einigen Zeilen nach dem Update aktualisieren. Im Allgemeinen ist dies meine Idee, es zu machen:Aktualisieren Sie andere Zeilen in Update-Trigger

CREATE TRIGGER `trigger_numbers_before_update` BEFORE UPDATE ON `numbers` 
FOR EACH ROW BEGIN 
IF NEW.order_key <> OLD.order_key THEN 
    UPDATE `numbers` set `order_key` = `order_key`+1 where `order_key` >= NEW.order_key AND `book_id`=NEW.book_id; 
END IF; 
END 

Allerdings habe ich einen Fehler:

Error: SQLSTATE[HY000]: General error: 1442 Can't update table 'numbers' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 

Wie ich denke, es ist nur Endlosschleife bedeuten. Also, wissen Sie, wie man es richtig macht, außer dass man nach dem Update die SQL-Funktion von PHP aus startet?

Antwort

0

Nein. Es ist keine Endlosschleife.

Es ist eine MySQL-Einschränkung, welche Operationen innerhalb eines Triggers ausgeführt werden können.

Es gibt keine Möglichkeit, diese Art von UPDATE-Operation (in Zeilen in numbers) innerhalb eines UPDATE-Triggers auf numbers durchzuführen. Und Sie können die UPDATE-Anweisung nicht in eine Funktion verschieben und dann die Funktion vom Trigger aufrufen, dass UPDATE nicht mit dem Ausführungskontext des Triggers ausgeführt werden kann.

Um diese Aktualisierung durchführen zu lassen, müsste das UPDATE außerhalb des Ausführungskontextes eines Triggers ausgeführt werden.


Und nicht in dieser Antwort adressiert ist die Frage, warum Sie eine solche Operation in erster Linie ausführen wollen würde.

Verwandte Themen