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

tilføjelse af en slags automatisk stigningskolonne til en mysql-tabel

MySQL øger ikke automatisk andet end heltal. Du kan ikke automatisk øge en streng.

Du kan ikke bruge en trigger til at udfylde en streng baseret på den automatiske stigningsværdi. Årsagen er, at den automatiske stigningsværdi ikke er genereret endnu på tidspunktet "før"-udløsere udføres, og det er for sent at ændre kolonner i "efter"-udløsere.

Se også mit svar til https://stackoverflow.com/a/26899091/20860

Du kan ikke bruge en virtuel kolonne, sandsynligvis af samme grund.

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 bliver nødt til at lade det heltal automatisk stige, og derefter bruge UPDATE til at udfylde din "log-nnnnnn"-streng, efter at indsættelsen er færdig.

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. Udskiftning af NULL med 0 i en SQL-serverforespørgsel

  2. Returner boolsk værdi som TRUE eller FALSE i Select (PostgreSQL/pgAdmin)

  3. Flere tekstværdier i én kolonne, kræver forespørgslen for at finde det mest gentagelige ord

  4. Hvad er LIKE Logical Operator i SQL Server - SQL Server / TSQL Tutorial Del 123