Mysql
 sql >> Base de données >  >> RDS >> Mysql

Deux colonnes d'auto-incrémentation ou auto-incrémentation et même valeur dans une autre colonne

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