Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Duas colunas de autoincremento ou autoincremento e o mesmo valor em outra coluna


Então você quer deixar uma coluna usar o recurso auto_increment, mas fazer outra coluna na mesma tabela também ter o mesmo valor?

Não consigo pensar em uma razão pela qual você precisaria desse recurso. Talvez você possa explicar o que está tentando realizar e eu posso sugerir uma solução diferente?

Um gatilho não funcionará para isso. É um problema de galinha e ovo:
  • Você não pode alterar o valor de nenhuma coluna em um AFTER acionar.
  • Mas o valor de incremento automático ainda não está definido quando um BEFORE o gatilho é executado.

Também não funcionará usar um MySQL 5.7 GENERATED coluna:
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.

Você não pode fazer isso em uma única instrução SQL. Você tem que INSERT a linha e, em seguida, faça imediatamente um UPDATE para definir sua segunda coluna com o mesmo valor.
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();

Você também pode gerar o valor de ID usando algum outro mecanismo além de AUTO_INCREMENT (por exemplo, uma chave de incremento do Memcached). Então você pode inserir o novo valor em ambas as colunas:
INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_id);