Come rendere l’incremento automatico della chiave primaria della tabella MySQL con un certo prefisso

Ho una tabella come questa

table id Varchar(45) NOT NULL AUTO_INCREMENT PRIMARY KEY, name CHAR(30) NOT NULL, 

Voglio incrementare il mio campo id come 'LHPL001','LHPL002','LHPL003' … ecc. Cosa dovrei fare per quello? Per favore fatemi sapere ogni ansible via.

Se hai davvero bisogno di questo, puoi raggiungere il tuo objective con l’aiuto di una tabella separata per il sequenziamento (se non ti dispiace) e un grilletto.

tabelle

 CREATE TABLE table1_seq ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ); CREATE TABLE table1 ( id VARCHAR(7) NOT NULL PRIMARY KEY DEFAULT '0', name VARCHAR(30) ); 

Ora il grilletto

 DELIMITER $$ CREATE TRIGGER tg_table1_insert BEFORE INSERT ON table1 FOR EACH ROW BEGIN INSERT INTO table1_seq VALUES (NULL); SET NEW.id = CONCAT('LHPL', LPAD(LAST_INSERT_ID(), 3, '0')); END$$ DELIMITER ; 

Quindi basta inserire le righe su table1

 INSERT INTO Table1 (name) VALUES ('Jhon'), ('Mark'); 

E tu avrai

 |  ID |  NOME |
 ------------------
 |  LHPL001 |  Jhon |
 |  LHPL002 |  Segna |

Ecco la demo di SQLFiddle

Creare una tabella con un normale ID autoincrement numerico, ma definirlo con ZEROFILL o utilizzare LPAD per aggiungere zeri durante la selezione. Quindi CONCAT i valori per ottenere il comportamento desiderato. Esempio 1:

 create table so ( id int(3) unsigned zerofill not null auto_increment primary key, name varchar(30) not null ); insert into so set name = 'John'; insert into so set name = 'Mark'; select concat('LHPL', id) as id, name from so; +---------+------+ | id | name | +---------+------+ | LHPL001 | John | | LHPL002 | Mark | +---------+------+ 

Esempio 2:

 create table so ( id int unsigned not null auto_increment primary key, name varchar(30) not null ); insert into so set name = 'John'; insert into so set name = 'Mark'; select concat('LHPL', LPAD(id, 3, 0)) as id, name from so; +---------+------+ | id | name | +---------+------+ | LHPL001 | John | | LHPL002 | Mark | +---------+------+ 

So che è tardi, ma voglio solo condividere ciò che ho fatto per questo. Non sono autorizzato ad aggiungere un’altra tabella o trigger, quindi ho bisogno di generarlo in una singola query al momento dell’inserimento. Per il tuo caso, puoi provare questa query.

 CREATE TABLE YOURTABLE( IDNUMBER VARCHAR(7) NOT NULL PRIMARY KEY, ENAME VARCHAR(30) not null ); 

Eseguire una selezione e utilizzare questa query di selezione e salvare nel parametro @IDNUMBER

 (SELECT IFNULL (CONCAT('LHPL',LPAD( (SUBSTRING_INDEX (MAX(`IDNUMBER`), 'LHPL',-1) + 1), 5, '0')), 'LHPL001') AS 'IDNUMBER' FROM YOURTABLE ORDER BY `IDNUMBER` ASC) 

E quindi la query di inserimento sarà:

 INSERT INTO YOURTABLE(IDNUMBER, ENAME) VALUES (@IDNUMBER, 'EMPLOYEE NAME'); 

Il risultato sarà lo stesso dell’altra risposta, ma la differenza è che non sarà necessario creare un’altra tabella o trigger. Spero di poter aiutare qualcuno che abbia lo stesso caso del mio.