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

ajouter une sorte de colonne d'incrémentation automatique à une table mysql

MySQL n'auto-incrémente rien d'autre que des entiers. Vous ne pouvez pas auto-incrémenter une chaîne.

Vous ne pouvez pas utiliser un déclencheur pour remplir une chaîne en fonction de la valeur d'auto-incrémentation. La raison en est que la valeur d'auto-incrémentation n'est pas encore générée au moment où les déclencheurs "avant" s'exécutent et qu'il est trop tard pour modifier les colonnes dans les déclencheurs "après".

Voir aussi ma réponse à https://stackoverflow.com/a/26899091/20860

Vous ne pouvez pas utiliser une colonne virtuelle, probablement pour la même raison.

mysql> create table t (id int(5) zerofill auto_increment primary key, 
    virtcolumn char(8) as (concat('log-', id)));
ERROR 3109 (HY000): Generated column 'virtcolumn' cannot refer to auto-increment column.

Vous devrez laisser l'entier s'auto-incrémenter, puis utiliser UPDATE pour remplir votre chaîne "log-nnnnnn" une fois l'insertion terminée.

CREATE TABLE `t` (
  `id` int(5) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `log` char(9) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `t` () VALUES ();

UPDATE `t` SET `log` = CONCAT('log-', `id`) WHERE `id` = LAST_INSERT_ID();

SELECT * FROM `t`;
+-------+-----------+
| id    | log       |
+-------+-----------+
| 00001 | log-00001 |
+-------+-----------+