Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Hinzufügen einer Art Auto-Increment-Spalte zu einer MySQL-Tabelle

MySQL inkrementiert nichts anderes als ganze Zahlen automatisch. Sie können eine Zeichenfolge nicht automatisch inkrementieren.

Sie können keinen Trigger verwenden, um eine Zeichenfolge basierend auf dem Wert für die automatische Erhöhung zu füllen. Der Grund dafür ist, dass der Autoinkrementwert zum Zeitpunkt "vor" der Ausführung von Triggern noch nicht generiert wurde und es zu spät ist, Spalten in "nach" Triggern zu ändern.

Siehe auch meine Antwort auf https://stackoverflow.com/a/26899091/20860

Sie können wahrscheinlich aus demselben Grund keine virtuelle Spalte verwenden.

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.

Sie müssen die Ganzzahl automatisch inkrementieren lassen und anschließend UPDATE verwenden, um Ihren "log-nnnnnn"-String zu füllen, nachdem die Einfügung abgeschlossen ist.

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