Quindi vuoi consentire a una colonna di utilizzare la funzione auto_increment, ma fare in modo che anche un'altra colonna nella stessa tabella abbia lo stesso valore?
Non riesco a pensare a un motivo per cui avresti bisogno di questa funzione. Forse potresti spiegare cosa stai cercando di ottenere e posso suggerirti una soluzione diversa?
Un trigger non funzionerà per questo. È un problema di gallina e uova:
- Non puoi modificare il valore di nessuna colonna in un
AFTER
grilletto. - Ma il valore di incremento automatico non è ancora impostato quando un
BEFORE
il trigger viene eseguito.
Inoltre, non funzionerà con l'utilizzo di MySQL 5.7 GENERATED
colonna:
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.
Non puoi farlo in una singola istruzione SQL. Devi INSERT
la riga, quindi eseguire immediatamente un UPDATE
per impostare la seconda colonna sullo stesso valore.
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();
In alternativa potresti generare il valore ID usando qualche altro meccanismo oltre a AUTO_INCREMENT
(ad esempio una chiave di incremento Memcached). Quindi potresti inserire il nuovo valore in entrambe le colonne:
INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_id);