Cómo hacer que la clave principal de la tabla MySQL se incremente automáticamente con algún prefijo
tengo una mesa asi
table
id Varchar(45) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(30) NOT NULL,
Quiero incrementar mi campo de identificación como 'LHPL001','LHPL002','LHPL003'
... etc. ¿Qué debo hacer para eso? Por favor, hágamelo saber de cualquier forma posible.
Si realmente necesita esto, puede lograr su objetivo con la ayuda de una tabla separada para secuenciar (si no le importa) y un disparador.
Mesas
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 gatillo
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 ;
Luego simplemente insertas filas en la tabla1.
INSERT INTO Table1 (name)
VALUES ('Jhon'), ('Mark');
Y tendrás
| identificación | NOMBRE | ------------------ | LHPL001 | Jhon | | LHPL002 | marca |
Aquí está la demostración de SQLFiddle
Cree una tabla con un ID de incremento automático numérico normal, pero defínala con ZEROFILL
o utilícela LPAD
para agregar ceros al seleccionar. Luego, CONCAT
los valores para obtener el comportamiento previsto. 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 solo quiero compartir lo que he hecho para esto. No puedo agregar otra tabla o activador, por lo que necesito generarlo en una única consulta al insertarlo. Para su caso, ¿puede probar esta consulta?
CREATE TABLE YOURTABLE(
IDNUMBER VARCHAR(7) NOT NULL PRIMARY KEY,
ENAME VARCHAR(30) not null
);
Realice una selección y utilice esta consulta de selección y guárdela 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 luego Insertar consulta 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 necesitará crear otra tabla o activador. Espero poder ayudar a alguien que tenga el mismo caso que el mío.