Neznám žádný způsob, jak to udělat v jednom příkazu, dokonce ani pomocí spouštěče.
Řešení spouštění, které navrhl @Lucky, by v MySQL vypadalo takto:
CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTable
FOR EACH ROW BEGIN
SET NEW.group_id = COALESCE(NEW.group_id, NEW.id);
END
Nicméně je tu problém. V BEFORE INSERT
fáze, automaticky vygenerované id
hodnota ještě nebyla vygenerována. Pokud tedy group_id
je null, výchozí je NEW.id
což je vždy 0.
Pokud však toto pravidlo změníte tak, aby se spouštělo během AFTER INSERT
fáze, takže máte přístup k vygenerované hodnotě NEW.id
, nemůžete upravit hodnoty sloupců.
MySQL nepodporuje výrazy pro DEFAULT
sloupce, takže toto chování nemůžete deklarovat ani v definici tabulky. *Aktualizace:MySQL 8.0.13 podporuje DEFAULT (<expression>)
ale výraz stále nemůže záviset na hodnotě automatického přírůstku (toto je zdokumentováno
).
Jediným řešením je provést INSERT
a poté okamžitě proveďte UPDATE
změnit group_id
pokud není nastaveno.
INSERT INTO MyTable (group_id, value) VALUES (NULL, 'a');
UPDATE MyTable SET group_id = COALESCE(group_id, id) WHERE id = LAST_INSERT_ID();