Mysql
 sql >> Database >  >> RDS >> Mysql

aggiungendo una sorta di colonna di incremento automatico a una tabella mysql

MySQL non incrementa automaticamente nient'altro che numeri interi. Non puoi incrementare automaticamente una stringa.

Non è possibile utilizzare un trigger per popolare una stringa in base al valore di incremento automatico. Il motivo è che il valore di incremento automatico non è stato ancora generato al momento dell'esecuzione dei trigger "prima" ed è troppo tardi per modificare le colonne nei trigger "dopo".

Vedi anche la mia risposta a https://stackoverflow.com/a/26899091/20860

Non puoi usare una colonna virtuale, probabilmente per lo stesso motivo.

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.

Dovrai lasciare che il numero intero si autoincrementi, quindi successivamente utilizzare UPDATE per popolare la stringa "log-nnnnnn" al termine dell'inserimento.

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 |
+-------+-----------+