Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

adicionando um tipo de coluna de incremento automático a uma tabela mysql


O MySQL não incrementa automaticamente nada além de inteiros. Você não pode incrementar automaticamente uma string.

Você não pode usar um gatilho para preencher uma string com base no valor de incremento automático. O motivo é que o valor de incremento automático ainda não é gerado no momento em que os gatilhos "antes" são executados e é tarde demais para alterar as colunas nos gatilhos "depois".

Veja também minha resposta para https://stackoverflow.com/a/26899091/20860

Você não pode usar uma coluna virtual, provavelmente pelo mesmo 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.

Você terá que permitir o incremento automático do inteiro e, em seguida, usar UPDATE para preencher sua string "log-nnnnnn" após a conclusão da inserção.
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 |
+-------+-----------+