Takže chcete, aby jeden sloupec používal funkci auto_increment, ale chcete, aby další sloupec ve stejné tabulce měl také stejnou hodnotu?
Nenapadá mě důvod, proč byste tuto funkci potřebovali. Možná byste mohl vysvětlit, čeho se snažíte dosáhnout, a já vám mohu navrhnout jiné řešení?
Spoušť na to nebude fungovat. Je to problém slepice a vejce:
- Nemůžete změnit hodnotu žádného sloupce v
AFTER
spoušť. - Ale hodnota automatického zvýšení ještě není nastavena, když je
BEFORE
trigger se spustí.
Také nebude fungovat použití MySQL 5.7 GENERATED
sloupec:
CREATE TABLE MyTable (
id INT AUTO_INCREMENT PRIMARY KEY,
why_would_you_want_this INT GENERATED ALWAYS AS (id)
);
ERROR 3109 (HY000): Generated column 'why_would_you_want_this'
cannot refer to auto-increment column.
Nemůžete to udělat jedním příkazem SQL. Musíte INSERT
řádek a poté okamžitě proveďte UPDATE
pro nastavení druhého sloupce na stejnou hodnotu.
CREATE TABLE MyTable (
id INT AUTO_INCREMENT PRIMARY KEY,
why_would_you_want_this INT
);
INSERT INTO MyTable () VALUES ();
UPDATE MyTable SET why_would_you_want_this = LAST_INSERT_ID()
WHERE id = LAST_INSERT_ID();
Alternativně můžete vygenerovat hodnotu ID pomocí jiného mechanismu kromě AUTO_INCREMENT
(například inkrementační klíč Memcached). Potom můžete vložit novou hodnotu do obou sloupců:
INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_id);