2017-03-07 4 views
0

어떻게 자동 증가하는 기본 키를 가질 수 있습니까? 예 : 필드 이름에 무언가를 삽입하면 필드 ID는 마지막 값 +1 인 값을 할당해야합니다. SQL 기본 키 증가

 
id, name 
1, test1 
2, test2 

은 그래서 testX 같은 이름의 무언가를 삽입하고 내가 어떻게 할 수있는 ID는 자동 3

로 지정해야 하는가? 그런 다음 자동 증가를 달성하는 데 사용할 수있는 트리거과 순서를 사용하여, 파이어 버드의 일부 이전 버전을 사용하는 경우

create table T (
    id integer generated by default as identity primary key, 
    ... 
); 

: 당신이 파이어 버드 3을 사용하는 경우

+2

서버 측 생성기를 사용 하시겠습니까? – MartynA

+0

왜이 Q'[delphi]'에 태그를 붙였습니까? 그것은 명확하게 IB/Firebird 질문입니다. –

+0

@FreeConsulting 그럼, 다음 질문은 델파이와 관련이 있습니다. INSERT-RETURNING 또는 자동 생성 된 ID를 앱으로 다시 가져 오는 다른 방법을 지원하는 라이브러리를 요청할 것입니다 .-D –

답변

5

는 아인의 대답 당신은 같은 generator을 사용할 수 있습니다
SELECT GEN_ID(<GeneratorName>, 0) FROM RDB$DATABASE; 

당신은 매우 조심해야 구멍없이

CREATE OR ALTER trigger <trigger_name>_bi for <table_name> active before insert position 0 as begin if (new.id is null) then new.id = gen_id(my_generator,1); end 

당신이 기수법을 원하는 경우에

트리거
에 발전기를 사용하여 다음 값

SELECT GEN_ID(<GeneratorName>, 1) FROM RDB$DATABASE; 

생성.

발전기/시퀀스는 비 트랜잭션입니다.
작업이 실패하면 값을 얻으면 구멍이 생깁니다.

3

는 당신이 identity column 기능을 사용할 수 있습니다 : 파이어 버드 2 이후 returning clause는 서버 측에서 생성 된 ID 값을 얻을 매우 편리하다

create table T (
    id integer primary key, 
    ... 
); 

CREATE SEQUENCE t_seq; 

create trigger t_gen_id 
    active before insert 
    on T 
as 
begin 
    if(new.id is null)then new.id = next value for t_seq; 
end; 

지원됩니다.

: 발전기의 현재 값을 얻기

CREATE GENERATOR <name>; 
SET GENERATOR <name> TO <value>; 

: 만들기 발전기를

: 또한