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