Ich habe eine Tabelle wie diese
table
id Varchar(45) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(30) NOT NULL,
Ich möchte mein id-Feld inkrementieren, z.B. 'LHPL001','LHPL002','LHPL003'
... usw.
Was muss ich dafür tun? Bitte lassen Sie mich einen möglichen Weg wissen.
Wenn Sie dies wirklich brauchen, können Sie Ihr Ziel mit Hilfe einer separaten Tabelle für die Sequenzierung (wenn Sie nichts dagegen haben) und einem Trigger erreichen.
Tabellen
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)
);
Jetzt der Auslöser
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 ;
Dann fügen Sie einfach Zeilen in Tabelle1 ein
INSERT INTO Table1 (name)
VALUES ('Jhon'), ('Mark');
Und Sie'haben dann
| ID | NAME | ------------------ | LHPL001 | Jhon | | LHPL002 | Mark |
Hier ist SQLFiddle Demo
Erstellen Sie eine Tabelle mit einer normalen numerischen Auto-Inkrement-ID, aber definieren Sie sie entweder mit ZEROFILL
oder verwenden Sie LPAD
, um bei der Auswahl Nullen hinzuzufügen. Dann CONCAT
die Werte, um das gewünschte Verhalten zu erhalten. Beispiel #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 |
+---------+------+
Beispiel #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 |
+---------+------+
Ich weiß, es ist spät, aber ich möchte nur auf, was ich für diese getan haben zu teilen. Es ist mir nicht erlaubt, eine weitere Tabelle oder einen Trigger hinzuzufügen, also muss ich sie in einer einzigen Abfrage beim Einfügen generieren. Für Ihren Fall, können Sie diese Abfrage versuchen.
CREATE TABLE YOURTABLE(
IDNUMBER VARCHAR(7) NOT NULL PRIMARY KEY,
ENAME VARCHAR(30) not null
);
Führen Sie einen Select aus, verwenden Sie diese Select-Abfrage und speichern Sie sie im Parameter @IDNUMBER
(SELECT IFNULL
(CONCAT('LHPL',LPAD(
(SUBSTRING_INDEX
(MAX(`IDNUMBER`), 'LHPL',-1) + 1), 5, '0')), 'LHPL001')
AS 'IDNUMBER' FROM YOURTABLE ORDER BY `IDNUMBER` ASC)
Die Abfrage einfügen lautet dann :
INSERT INTO YOURTABLE(IDNUMBER, ENAME) VALUES
(@IDNUMBER, 'EMPLOYEE NAME');
Das Ergebnis wird das gleiche sein wie die andere Antwort, aber der Unterschied ist, dass Sie keine weitere Tabelle oder einen Trigger erstellen müssen. Ich hoffe, dass ich jemandem helfen kann, der einen ähnlichen Fall wie ich hat.