Tengo una tabla como esta
table
id Varchar(45) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(30) NOT NULL,
Quiero incrementar mi campo id como 'LHPL001','LHPL002','LHPL003'
...etc.
¿Qué debo hacer para ello? Por favor, indíqueme cualquier forma posible.
Si realmente lo necesita, puede lograr su objetivo con la ayuda de una tabla separada para la secuenciación (si no le importa) y un disparador.
Tablas
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)
);
Ahora el activador
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 ;
Entonces sólo inserta filas a la tabla1
INSERT INTO Table1 (name)
VALUES ('Jhon'), ('Mark');
| LHPL001 Jhon | LHPL002 | Mark |
Aquí está SQLFiddle demo
Cree una tabla con un ID de autoincremento numérico normal, pero defínalo con ZEROFILL
, o utilice LPAD
para añadir ceros al seleccionar. Luego CONCAT
los valores para obtener el comportamiento deseado. Ejemplo #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 |
+---------+------+
Ejemplo #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 |
+---------+------+
Sé que es tarde pero quiero compartir lo que he hecho para esto. No se me permite añadir otra tabla o trigger por lo que necesito generarlo en una sola consulta al insertar. Para tu caso, puedes probar esta consulta.
CREATE TABLE YOURTABLE(
IDNUMBER VARCHAR(7) NOT NULL PRIMARY KEY,
ENAME VARCHAR(30) not null
);
Realiza un select y utiliza esta consulta select y guarda en el parámetro @IDNUMBER
(SELECT IFNULL
(CONCAT('LHPL',LPAD(
(SUBSTRING_INDEX
(MAX(`IDNUMBER`), 'LHPL',-1) + 1), 5, '0')), 'LHPL001')
AS 'IDNUMBER' FROM YOURTABLE ORDER BY `IDNUMBER` ASC)
Y entonces la consulta Insert será :
INSERT INTO YOURTABLE(IDNUMBER, ENAME) VALUES
(@IDNUMBER, 'EMPLOYEE NAME');
El resultado será el mismo que la otra respuesta pero la diferencia es que no será necesario crear otra tabla o trigger. Espero que pueda ayudar a alguien que tenga el mismo caso que yo.