Mysql
 sql >> Database >  >> RDS >> Mysql

Due colonne di autoincremento o autoincremento e stesso valore in un'altra colonna

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