두 가지 방법의 차이점은 TABLE의 COLUMN에 직접적인 속성을 부여하는 IDENTITY는 과정 그대로, TABLE에 종속적인 증감값을 부여합니다.
그러나, 시퀸스의 경우 값을 INSERT하는 개념(?)으로 테이블과의 종속성이 없습니다.
아래 예제들을 통해 확인해 보겠습니다.
❊ [SEQUENCE]
1. 시퀸스 생성
/* ## 시퀸스 생성 ## */ CREATE SEQUENCE SEQ_TEST_1 AS DECIMAL(20, 0) START WITH 1 -- 시작값 INCREMENT BY 1 -- 증감(+,-) 수치 MINVALUE 1 -- 최소값 MAXVALUE 1000 -- 최대값 CYCLE -- 순환 여부 CACHE 1 -- 1: NO CACHE / (2 ~ ) : CACHE 크기
2. 시퀸스 값 증가
SELECT NEXT VALUE FOR SEQ_TEST_1
설정한 증감값(+,-)에 따라 시작값부터 증감값을 반환합니다.
3. 시퀸스 테이블 적용 예제
BEGIN -- 샘플 테이블에 시퀸스값 삽입 INSERT INTO [dbo].[TB_SAMPLE_1] (ID, CONTENTS) SELECT NEXT VALUE FOR SEQ_TEST_1 AS ID, 'TEST_CONTENTS' AS CONTENTS SELECT * FROM [dbo].[TB_SAMPLE_1] END
" INSERT ~ SELECT " 구문을 이용해 ID 컬럼에 증감된 시퀸스 값을 INSERT하는 예제입니다.
3번 실행한 쿼리 결과는 위 그림과 같이 ID가 증감값 설정 처럼 1씩 증가한 모습을 보입니다.
그러나, " 2. 시퀸스 값 증가 " 쿼리를 실행 후 다시 위 쿼리를 실행 시킨다면 어떻게 될까요?
[①시퀸스 증가] |
[②예제 쿼리 실행] |
" ①시퀸스 증가 " 처럼 외부에서 시퀸스 값을 증가 시킨 후 " ②예제 쿼리 실행 "의 결과입니다.
당연한 현상이지만 결과적으로 시퀸스가 테이블과의 종속성이 없음을 확인 할 수 있었습니다.
4. (참고) 시퀸스 값 재설정 - 초기화
ALTER SEQUENCE SEQ_TEST_1 RESTART WITH 1
3번 처럼 변경된 값들을 재설정하고 싶은 경우 위 쿼리를 사용해줍니다.
시퀸스와 비슷한 기능을 하는 테이블 종속적인 IDENTITY 기능이 있습니다.
1. IDENTITY 컬럼 추가 및 속성 부여
❊ [IDENTITY]
1. IDENTITY 컬럼 추가 및 속성 부여
ALTER TABLE TB_SAMPLE_2 ADD SEQ INT IDENTITY(1,1);
인자는 IDENTITY (시작값, 증감값) 입니다.
2. IDENTITY 테이블 적용 예제
BEGIN INSERT INTO [dbo].TB_SAMPLE_2 (ID, CONTENTS) SELECT 'TEST_ID' AS ID, 'TEST_CONTENTS' AS CONTENTS SELECT * FROM [dbo].TB_SAMPLE_2 END
IDENTITY를 별도로 언급하지 않더라도 INSERT 구문을 통해 값이 들어갈 때 지정한 SEQ 컬럼에 IDENTITY 증감값이 적용되는 모습입니다.
여기서 한 가지 주의할 점!
테이블의 데이터를 모두 DELETE하더라도 SEQ는 초기화 되지 않습니다.
따라서 별도의 IDENTITY 초기화(재설정) 과정이 필요합니다.
3. IDENTITY 초기화 (재설정)
DBCC CHECKIDENT (TB_SAMPLE_2, RESEED, 0)
인자값은 ([테이블명], RESEED, [시작값]) 입니다.
0 댓글