У меня есть такая таблица
table
id Varchar(45) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(30) NOT NULL,
Я хочу увеличить поле своего идентификатора, например 'LHPL001','LHPL002','LHPL003'
... и т. Д. Что мне для этого нужно сделать? Пожалуйста, дайте мне знать любым возможным способом.
mysql
auto-increment
Виджай
источник
источник
Ответы:
Если вам это действительно нужно, вы можете достичь своей цели с помощью отдельной таблицы для секвенирования (если не возражаете) и триггера.
Столы
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');
И у тебя будет
Вот демонстрация SQLFiddle
источник
Создайте таблицу с обычным числовым идентификатором auto_increment, но либо определите ее с помощью
ZEROFILL
, либо используйтеLPAD
для добавления нулей при выборе. ЗатемCONCAT
значения, чтобы получить желаемое поведение. Пример №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 | +---------+------+
Пример №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 | +---------+------+
источник
Я знаю, что уже поздно, но я просто хочу поделиться тем, что я для этого сделал. Мне не разрешено добавлять другую таблицу или триггер, поэтому мне нужно сгенерировать их в одном запросе при вставке. В вашем случае вы можете попробовать этот запрос.
CREATE TABLE YOURTABLE( IDNUMBER VARCHAR(7) NOT NULL PRIMARY KEY, ENAME VARCHAR(30) not null );
Выполните выбор и используйте этот запрос выбора и сохраните в параметре @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 будет:
INSERT INTO YOURTABLE(IDNUMBER, ENAME) VALUES (@IDNUMBER, 'EMPLOYEE NAME');
Результат будет таким же, как и другой ответ, но разница в том, что вам не нужно будет создавать другую таблицу или триггер. Я надеюсь, что смогу помочь кому-то, у кого такой же случай, как у меня.
источник
Вот пример PostgreSQL без триггера, если он кому-то нужен на PostgreSQL:
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;
источник