sql >> Database teknologi >  >> RDS >> Mysql

MySQL-udløser for at opdatere et felt til værdien af ​​id

Jeg kender ikke til nogen måde at gøre dette på i én erklæring, selv ved at bruge en trigger.

Triggerløsningen, som @Lucky foreslog, ville se sådan ud i MySQL:

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

Der er dog et problem. I BEFORE INSERT fase, det autogenererede id værdi er ikke blevet genereret endnu. Så hvis group_id er null, er den som standard NEW.id som altid er 0.

Men hvis du ændrer denne udløser til udløsning under AFTER INSERT fase, så du har adgang til den genererede værdi af NEW.id , du kan ikke ændre kolonneværdier.

MySQL understøtter ikke udtryk for DEFAULT af en kolonne, så du kan heller ikke erklære denne adfærd i tabeldefinitionen. *Opdatering:MySQL 8.0.13 understøtter DEFAULT (<expression>) men udtrykket kan stadig ikke afhænge af en automatisk stigningsværdi (dette er dokumenteret ).

Den eneste løsning er at udføre INSERT , og foretag derefter straks en UPDATE for at ændre group_id hvis den ikke er indstillet.

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


  1. isolering af en understreng i en streng før et symbol i SQL Server 2008

  2. Cloud Migration 101:Flytning fra SQL Server til Azure

  3. Bestemmelse af påskedatoerne for ethvert år i Oracle PLSQL

  4. Skadelige, gennemgående SQL Server-ydeevnemyter