Cómo hacer que la clave principal de la tabla MySQL se incremente automáticamente con algún prefijo

Resuelto Vijay asked hace 11 años • 4 respuestas

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.

Vijay avatar Jul 27 '13 10:07 Vijay
Aceptado

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

peterm avatar Jul 27 '2013 04:07 peterm

Cree una tabla con un ID de incremento automático numérico normal, pero defínala con ZEROFILLo utilícela LPADpara agregar ceros al seleccionar. Luego, CONCATlos 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 |
+---------+------+
Fluffy avatar Mar 02 '2015 21:03 Fluffy

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.

yhAm avatar Mar 10 '2017 02:03 yhAm