sql >> Databáze >  >> RDS >> Mysql

Spouštěč MySQL pro aktualizaci pole na hodnotu id

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();


  1. Nahraďte znaky unicode v PostgreSQL

  2. Funkce TO_YMINTERVAL() v Oracle

  3. Jak zacházet s více objekty pomocí Průzkumníka objektů Detail Windows v SSMS - SQL Server / Výukový program TSQL, část 22

  4. Jak převést řetězec na datum v MySQL?