primary primaria llave foranea eliminar drop compuesta clave agregar mysql auto-increment

primaria - eliminar primary key mysql



Cómo hacer que la clave primaria de la tabla MySQL aumente automáticamente con algún prefijo (3)

Tengo una mesa como esta

table id Varchar(45) NOT NULL AUTO_INCREMENT PRIMARY KEY, name CHAR(30) NOT NULL,

Quiero incrementar mi campo de id como ''LHPL001'',''LHPL002'',''LHPL003'' ... etc. ¿Qué debo hacer para eso? Por favor, hágamelo saber de alguna manera posible.


Cree una tabla con una identificación auto_increment numérica normal, pero defínalo con ZEROFILL o use LPAD para agregar ceros al seleccionar. Luego CONCAT los valores para obtener su 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 solo quiero compartir lo que he hecho para esto. No tengo permiso para agregar otra tabla o desencadenador, así que necesito generarlo en una sola consulta al insertarlo. Para su caso, puede intentar esta consulta.

CREATE TABLE YOURTABLE( IDNUMBER VARCHAR(7) NOT NULL PRIMARY KEY, ENAME VARCHAR(30) not null );

Realice una selección y use 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 la consulta Insertar será:

INSERT INTO YOURTABLE(IDNUMBER, ENAME) VALUES (@IDNUMBER, ''EMPLOYEE NAME'');

El resultado será el mismo que el de la otra respuesta, pero la diferencia es que no será necesario crear otra tabla o activador. Espero poder ayudar a alguien que tenga el mismo caso que el mío.


Si realmente lo necesita, puede lograr su objetivo con la ayuda de una tabla separada para la secuencia (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 disparador

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 solo insertas las filas en la tabla1

INSERT INTO Table1 (name) VALUES (''Jhon''), (''Mark'');

Y tendrás

| ID | NAME | ------------------ | LHPL001 | Jhon | | LHPL002 | Mark |

Aquí está la demostración de SQLFiddle