sql >> Databasteknik >  >> RDS >> Mysql

lägga till en sorts automatisk inkrementkolumn till en mysql-tabell

MySQL ökar inte automatiskt något annat än heltal. Du kan inte automatiskt öka en sträng.

Du kan inte använda en utlösare för att fylla i en sträng baserat på värdet för automatisk ökning. Anledningen är att det automatiska ökningsvärdet inte genereras ännu vid tidpunkten "före"-utlösare körs, och det är för sent att ändra kolumner i "efter"-utlösare.

Se även mitt svar till https://stackoverflow.com/a/26899091/20860

Du kan inte använda en virtuell kolumn, förmodligen av samma anledning.

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.

Du måste låta heltalet öka automatiskt och sedan använda UPDATE för att fylla i din "log-nnnnnn"-sträng efter att infogningen är klar.

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



  1. Ställ in tidszon i PHP och MySQL

  2. Använder returvärde från DELETE för UPPDATERING i Postgres

  3. Hur man använder parameter med LIKE i SQL Server Compact Edition

  4. Tabellalias fungerar inte i rå Oracle SQL-frågor i Django