Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Trigger zum Aktualisieren eines Felds auf den Wert von id

Ich kenne keine Möglichkeit, dies in einer Anweisung zu tun, nicht einmal mit einem Trigger.

Die von @Lucky vorgeschlagene Triggerlösung würde in MySQL so aussehen:

CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTable
FOR EACH ROW BEGIN
  SET NEW.group_id = COALESCE(NEW.group_id, NEW.id);
END

Es gibt jedoch ein Problem. Im BEFORE INSERT Phase, die automatisch generierte id Wert wurde noch nicht generiert. Wenn also group_id null ist, wird standardmäßig NEW.id verwendet was immer 0 ist.

Aber wenn Sie diesen Trigger so ändern, dass er während AFTER INSERT ausgelöst wird Phase, sodass Sie Zugriff auf den generierten Wert von NEW.id haben , Sie können keine Spaltenwerte ändern.

MySQL unterstützt keine Ausdrücke für DEFAULT einer Spalte, daher können Sie dieses Verhalten auch nicht in der Tabellendefinition deklarieren. *Aktualisierung:MySQL 8.0.13 unterstützt DEFAULT (<expression>) aber der Ausdruck kann immer noch nicht von einem Auto-Increment-Wert abhängen (dies ist dokumentiert ).

Die einzige Lösung besteht darin, INSERT auszuführen , und führen Sie dann sofort ein UPDATE durch um die group_id zu ändern wenn es nicht gesetzt ist.

INSERT INTO MyTable (group_id, value) VALUES (NULL, 'a');
UPDATE MyTable SET group_id = COALESCE(group_id, id) WHERE id = LAST_INSERT_ID();