sql >> Database >  >> RDS >> Mysql

MySQL-trigger om een ​​veld bij te werken naar de waarde van id

Ik ken geen enkele manier om dit in één verklaring te doen, zelfs niet met een trigger.

De trigger-oplossing die @Lucky voorstelde, zou er als volgt uitzien in MySQL:

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

Er is echter een probleem. In de BEFORE INSERT fase, de automatisch gegenereerde id waarde is nog niet gegenereerd. Dus als group_id is null, het is standaard NEW.id wat altijd 0 is.

Maar als u deze trigger wijzigt om te worden geactiveerd tijdens de AFTER INSERT fase, zodat u toegang heeft tot de gegenereerde waarde van NEW.id , kunt u kolomwaarden niet wijzigen.

MySQL ondersteunt geen expressies voor de DEFAULT van een kolom, dus u kunt dit gedrag ook niet declareren in de tabeldefinitie. *Update:MySQL 8.0.13 ondersteunt DEFAULT (<expression>) maar de uitdrukking kan nog steeds niet afhankelijk zijn van een waarde voor automatisch verhogen (dit is gedocumenteerd ).

De enige oplossing is om de INSERT . te doen , en doe dan onmiddellijk een UPDATE om de group_id te wijzigen als het niet is ingesteld.

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


  1. Correct volgehouden berekende kolommen

  2. Hoe de CREATE VIEW-code voor een weergave in PostgreSQL te zien?

  3. 3 manieren om het schema van een resultatenset in SQL Server te krijgen

  4. Genereer willekeurige int-waarde van 3 tot 6