2013-07-27 6 views

risposta

93

Se hai davvero bisogno di questo puoi raggiungere il tuo obiettivo con l'aiuto di una tabella separata per il sequenziamento (se non ti dispiace) e un grilletto.

Tabelle

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) 
); 

Ora il grilletto

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 ; 

Poi basta inserire righe di TABLE1

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

e avrete

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

Ecco SQLFiddle demo

9

Creare una tabella con un normale ID auto_increment numerico, ma in entrambi definiscono con ZEROFILL oppure usa LPAD per aggiungere zeri al momento della selezione. Quindi i valori CONCAT per ottenere il comportamento desiderato. Esempio:

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 | 
+---------+------+ 
+0

Inizialmente stavo pensando di memorizzare l'LHPL come una colonna separata e poi concatlo per concat (col1, col2) ma poi sarà un dolore nella S quando un giorno ho bisogno di cambiare l'LHPL. Quindi penso che lo farò dal lato server del programma. –

3

So che è tardi ma voglio solo condividere ciò che ho fatto per questo. Non sono autorizzato ad aggiungere un'altra tabella o trigger, quindi ho bisogno di generarlo in una singola query al momento dell'inserimento. Per il tuo caso, puoi provare questa query.

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

Eseguire un selezionare e utilizzare questa query di selezione e salvare al parametro @IDNUMBER

(SELECT IFNULL 
    (CONCAT('LHPL',LPAD(
     (SUBSTRING_INDEX 
     (MAX(`IDNUMBER`), 'LHPL',-1) + 1), 5, '0')), 'LHPL001') 
    AS 'IDNUMBER' FROM YOURTABLE ORDER BY `IDNUMBER` ASC) 

e quindi inserire interrogazione sarà:

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

Il risultato sarà lo stesso di l'altra risposta, ma la differenza è che non è necessario creare un'altra tabella o trigger. Spero di poter aiutare qualcuno che abbia lo stesso caso del mio.