Så du vil lade en kolonne bruge auto_increment-funktionen, men få en anden kolonne i samme tabel til at have samme værdi?
Jeg kan ikke komme i tanke om en grund til at du skal bruge denne funktion. Måske du kunne forklare, hvad du forsøger at opnå, og jeg kan foreslå en anden løsning?
En trigger virker ikke til dette. Det er et kylling-og-æg-problem:
- Du kan ikke ændre nogen kolonnes værdi i en
AFTER
udløser. - Men den automatiske stigningsværdi er ikke indstillet endnu, når en
BEFORE
trigger udføres.
Det vil heller ikke fungere at bruge en MySQL 5.7 GENERATED
kolonne:
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.
Du kan ikke gøre det i en enkelt SQL-sætning. Du skal INSERT
rækken, og foretag derefter straks en UPDATE
for at indstille din anden kolonne til samme værdi.
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();
Du kan alternativt generere ID-værdien ved hjælp af en anden mekanisme end AUTO_INCREMENT
(for eksempel en Memcached inkrementerende nøgle). Så kan du indsætte den nye værdi i begge kolonner:
INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_id);