автоматическое создание собственного идентификатора с помощью sql - PullRequest
0 голосов
/ 28 сентября 2011

Я относительно новичок в SQL и базах данных, и мне нужна помощь в следующей теме.У меня есть следующая таблица: (младший мужчина -> jm, младшая женщина -> jf, взрослый мужчина -> am, взрослая женщина-> af)

id    code     name    
1     jm       john       
2     am       patrick    
3     af       jane       
4     jm       peter      
5     jm       derrick    
6     af       mary       
7     jf       jessica  

и хотел бы создать поле внутри таблицыв качестве ссылки, которая состоит из кода и цифр автоинкремента следующим образом:

id      code     name     reference

1     jm       john       jm001

2     am       patrick    am001

3     af       jane       af001

4     jm       peter      jm002

5     jm       derrick    jm003

6     af       mary       af002

7     jf       jessica    jf001

Может кто-нибудь дать мне несколько советов, как это сделать?Спасибо

Ответы [ 3 ]

1 голос
/ 28 сентября 2011

Сначала спросите себя "почему?" как в комментарии Мартина. Если у вас есть хороший ответ на этот вопрос, то, вероятно, вы ищете последовательность для каждого типа. Например в Oracle:

CREATE SEQUENCE jm_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE;
CREATE SEQUENCE jf_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE;
CREATE SEQUENCE am_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE;
CREATE SEQUENCE af_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE;

Затем вы можете использовать их при вводе определенных типов. Например, чтобы ввести юношу, вы должны использовать:

Insert into table_name 
  values (id_seq.nextVal, 'jm', 'Bart', 'jm' || jm_seq.nextVal);

Кроме того, это не даст вам начальные нули, как в вашем примере, поэтому посмотрите, нужно ли форматировать ваш номер.

0 голосов
/ 10 января 2018

Вы можете использовать следующий код, чтобы получить желаемый результат ... Приветствия ...

drop table if exists Custom_id_Dynamic;
create table Custom_id_Dynamic (id int primary key auto_increment , Code varchar(20), 
Name varchar(20), Reference varchar(20));


drop procedure if exists Dynamic_id;

set @index:=0;
set @jm:=0;
set @unknown:=0;
set @am:=0;
set @af:=0;
set @jf:=0;

delimiter $$

create procedure Dynamic_id(
in code_new varchar(20), in name_new varchar(20)
)

begin
set code_new=lower(code_new);
if code_new='jm' then set @jm:=@jm+1, @index:=@jm;
elseif code_new='am' then set @am:=@am+1, @index:=@am;
elseif code_new='af' then set @af:=@af+1, @index:=@af;
elseif code_new='jf' then set @jf:=@jf+1, @index:=@jf;
else set @unknown:=@unknown+1, @index:=@unknown;
end if;
insert into Custom_id_Dynamic (Code, Name, Reference) 
values (code_new, name_new, concat(code_new, lpad(@index,3,0)));
end;



call Dynamic_id('jm','john');
call Dynamic_id('am','patrick');
call Dynamic_id('af','jane');
call Dynamic_id('jm','peter');
call Dynamic_id('jm','derrick');
call Dynamic_id('af','mary');
call Dynamic_id('jf','jessica');


select * from Custom_id_Dynamic;
0 голосов
/ 07 августа 2013

Вы можете использовать собственные значения автоинкремента в MySQL, такие как последовательности PostgreSQL:

http://en.latindevelopers.com/ivancp/2012/custom-auto-increment-values/

Надеюсь, вы нашли это полезным.

...