sql >> Databasteknik >  >> RDS >> Mysql

MySQL-utlösare för att uppdatera ett fält till värdet av id

Jag vet inte om något sätt att göra detta i ett uttalande, inte ens med en trigger.

Triggerlösningen som @Lucky föreslog skulle se ut så här i MySQL:

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

Det finns dock ett problem. I BEFORE INSERT phase, det automatiskt genererade id värde har inte genererats ännu. Så om group_id är null, är den som standard NEW.id som alltid är 0.

Men om du ändrar denna utlösare till att aktiveras under AFTER INSERT fas, så att du har tillgång till det genererade värdet för NEW.id , du kan inte ändra kolumnvärden.

MySQL stöder inte uttryck för DEFAULT av en kolumn, så du kan inte heller deklarera detta beteende i tabelldefinitionen. *Uppdatering:MySQL 8.0.13 stöder DEFAULT (<expression>) men uttrycket kan fortfarande inte bero på ett automatiskt ökningsvärde (detta är dokumenterad ).

Den enda lösningen är att göra INSERT , och gör sedan omedelbart en UPDATE för att ändra group_id om den inte är inställd.

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


  1. Är det möjligt att referera till kolumnnamn via bindningsvariabler i Oracle?

  2. ORA-16205 Uppgradering till 11.2.0.3

  3. Övervakning av Percona XtraDB-kluster - nyckelmått

  4. Bör MySQL ha sin tidszon inställd på UTC?