Donc, vous voulez laisser une colonne utiliser la fonctionnalité auto_increment, mais faire en sorte qu'une autre colonne de la même table ait également la même valeur ?
Je ne peux pas penser à une raison pour laquelle vous auriez besoin de cette fonctionnalité. Peut-être pourriez-vous expliquer ce que vous essayez d'accomplir, et je peux suggérer une solution différente ?
Un déclencheur ne fonctionnera pas pour cela. C'est un problème de poule et d'œuf :
- Vous ne pouvez pas modifier la valeur d'une colonne dans un
AFTER
gâchette. - Mais la valeur d'auto-incrémentation n'est pas encore définie lorsqu'un
BEFORE
le déclencheur s'exécute.
Il ne fonctionnera pas non plus d'utiliser un MySQL 5.7 GENERATED
colonne :
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.
Vous ne pouvez pas le faire dans une seule instruction SQL. Vous devez INSERT
la ligne, puis faites immédiatement un UPDATE
pour définir votre deuxième colonne sur la même valeur.
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();
Vous pouvez également générer la valeur de l'ID en utilisant un autre mécanisme que AUTO_INCREMENT
(par exemple une clé d'incrémentation Memcached). Ensuite, vous pouvez insérer la nouvelle valeur dans les deux colonnes :
INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_id);