如何使MySQL表主键自动增加一些前缀

我有这样的桌子

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

我想增加我的ID字段,如'LHPL001','LHPL002','LHPL003'等。我该怎么做呢? 请让我知道任何可能的方式。

如果你真的需要这个,你可以通过单独的sorting表(如果你不介意的话)和触发器来实现你的目标。

 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) ); 

现在触发

 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 ; 

然后你只需要插入行到table1

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

你会有的

 |  ID |  NAME |
 ------------------
 |  LHPL001 |  Jhon |
 |  LHPL002 | 标记|

这里是SQLFiddle演示

使用正常的数字auto_increment ID创build一个表格,但是用ZEROFILL定义它,或者在select时使用LPAD添加零。 然后CONCAT值来获得您的预期行为。 例:

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

我知道这是晚了,但我只想分享我为此所做的。 我不允许添加其他表或触发器,因此我需要在插入时在一个查询中生成它。 对于你的情况,你可以尝试这个查询。

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

执行select并使用此select查询并保存到参数@IDNUMBER

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

然后插入查询将是:

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

结果将与其他答案相同,但不同之处在于,您不需要创build另一个表或触发器。 我希望能帮助一个和我一样的人。