Ich habe einen Tisch wie diesen
table
id Varchar(45) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(30) NOT NULL,
Ich möchte mein ID-Feld wie 'LHPL001','LHPL002','LHPL003'
... usw. erhöhen. Was muss ich dafür tun? Bitte lassen Sie mich einen möglichen Weg wissen.
mysql
auto-increment
Vijay
quelle
quelle
Antworten:
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 eines Auslösers 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) );
Nun 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 du wirst haben
Hier ist die SQLFiddle- Demo
quelle
Erstellen Sie eine Tabelle mit einer normalen numerischen auto_increment-ID, definieren Sie sie jedoch entweder mit
ZEROFILL
oderLPAD
fügen Sie bei der Auswahl Nullen hinzu. DannCONCAT
die Werte, um Ihr beabsichtigtes 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 | +---------+------+
quelle
Ich weiß, dass es spät ist, aber ich möchte nur mitteilen, was ich dafür getan habe. Ich darf keine weitere Tabelle oder keinen weiteren Trigger hinzufügen, daher muss ich diese beim Einfügen in einer einzigen Abfrage generieren. Können Sie diese Abfrage für Ihren Fall versuchen?
CREATE TABLE YOURTABLE( IDNUMBER VARCHAR(7) NOT NULL PRIMARY KEY, ENAME VARCHAR(30) not null );
Führen Sie eine Auswahl durch, verwenden Sie diese Auswahlabfrage 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)
Und dann lautet die Abfrage einfügen:
INSERT INTO YOURTABLE(IDNUMBER, ENAME) VALUES (@IDNUMBER, 'EMPLOYEE NAME');
Das Ergebnis ist das gleiche wie bei der anderen Antwort, aber der Unterschied besteht darin, dass Sie keine weitere Tabelle oder keinen anderen Trigger erstellen müssen. Ich hoffe, dass ich jemandem helfen kann, der den gleichen Fall wie ich hat.
quelle
Hier ist ein PostgreSQL-Beispiel ohne Trigger, wenn jemand es auf PostgreSQL benötigt:
CREATE SEQUENCE messages_seq; CREATE TABLE IF NOT EXISTS messages ( id CHAR(20) NOT NULL DEFAULT ('message_' || nextval('messages_seq')), name CHAR(30) NOT NULL, ); ALTER SEQUENCE messages_seq OWNED BY messages.id;
quelle