Computer >> 컴퓨터 >  >> 프로그래밍 >> SQL Server

SQL Server 시퀀스(Sequence) 완벽 가이드: 생성, 삭제, 속성 조회까지

시퀀스(Sequence)는 순서대로 정렬된 정수들의 집합입니다. 데이터베이스에서 시퀀스는 기본 키(PRIMARY KEY)와 유사하게 테이블의 각 행이 고유한 값을 가져야 한다는 요구 사항을 충족해야 하는 많은 애플리케이션에서 널리 활용됩니다.

이 글에서는 SQL Server에서 시퀀스를 생성하고 삭제하는 방법과, 시퀀스의 속성을 조회하는 방법을 구문과 예제와 함께 자세히 살펴보겠습니다.

CREATE SEQUENCE (시퀀스 생성)

구문

시퀀스를 생성하려면 다음 구문을 사용합니다.

CREATE SEQUENCE [schema.] sequence_name 
[AS datatype]
[START WITH value]
[INCREMENT BY value]
[MINVALUE value | NO MINVALUE]
[MAXVALUE value | NO MAXVALUE]
[CYCLE | NO CYCLE]
[CACHE value | NO CACHE];

매개변수 설명:

  1. AS datatype: BIGINT, INT, TINYINT, SMALLINT, DECIMAL, NUMERIC 중 하나의 데이터 타입을 지정할 수 있습니다. 특정 타입을 지정하지 않으면 기본값으로 BIGINT가 적용됩니다.
  2. START WITH value: 시퀀스가 반환하는 첫 번째 시작 값입니다.
  3. INCREMENT BY value: 시퀀스의 증가/감소 규칙을 나타내며, 양수 또는 음수를 지정할 수 있습니다. 양수를 지정하면 값이 점점 커지는 시퀀스가 되고, 음수를 지정하면 값이 점점 작아지는 시퀀스가 됩니다.
  4. MINVALUE value: 시퀀스에서 가질 수 있는 최솟값입니다.
  5. NO MINVALUE: 최솟값을 지정하지 않습니다.
  6. MAXVALUE value: 시퀀스에서 가질 수 있는 최댓값입니다.
  7. NO MAXVALUE: 최댓값을 지정하지 않습니다.
  8. CYCLE: 시퀀스가 마지막 값에 도달하면 처음부터 다시 시작합니다.
  9. NO CYCLE: 시퀀스가 마지막 값에 도달하면 오류가 발생하며, 다시 시작하지 않습니다.
  10. CACHE value: 디스크 I/O를 최소화하기 위해 지정한 개수만큼의 값을 메모리 캐시에 저장합니다.
  11. NO CACHE: 값을 캐시에 저장하지 않습니다.

예제

CREATE SEQUENCE contacts_seq 
AS BIGINT
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 99999
NO CYCLE
CACHE 10;

위 예제에서는 contacts_seq라는 이름의 시퀀스를 생성했습니다. 이 시퀀스는 1부터 시작하며, 이후 값들은 1씩 증가합니다(즉, 2, 3, 4...). 시퀀스는 약 10개의 값을 캐시에 저장하고, 최댓값은 99999입니다. 최댓값에 도달한 후에는 시퀀스를 다시 시작하지 않습니다(NO CYCLE).

필요한 옵션이 적다면 아래처럼 더 간단하게 작성할 수도 있습니다.

CREATE SEQUENCE contacts_seq 
START WITH 1
INCREMENT BY 1;

이렇게 하면 자동 번호(Auto Number) 필드 역할을 대신하는 시퀀스가 생성됩니다. 이제 이 시퀀스에서 실제 값을 가져오려면 NEXT VALUE FOR 명령을 사용합니다.

SELECT NEXT VALUE FOR contacts_seq;

이 문장은 contacts_seq 시퀀스에서 다음 값을 반환합니다. 이 값을 다른 SQL 문과 조합하여 활용할 수 있습니다. 예를 들어 다음과 같습니다.

INSERT INTO contacts 
(contact_id, last_name)
VALUES
(NEXT VALUE FOR contacts_seq, 'Smith');

위 INSERT 문은 contacts 테이블에 새 레코드를 추가합니다. 이때 contact_id 필드에는 contacts_seq 시퀀스의 다음 번호가 자동으로 할당되고, last_name 필드에는 'Smith'라는 값이 저장됩니다.

DROP SEQUENCE (시퀀스 삭제)

시퀀스를 생성한 후에는 여러 가지 이유로 데이터베이스에서 해당 시퀀스를 제거해야 하는 경우가 생길 수 있습니다.

구문

시퀀스를 삭제하려면 다음 구문을 사용합니다.

DROP SEQUENCE sequence_name;

매개변수 설명:

sequence_name: 삭제하려는 시퀀스의 이름입니다.

예제

DROP SEQUENCE contacts_seq;

이 명령을 실행하면 contacts_seq 시퀀스가 데이터베이스에서 삭제됩니다.

시퀀스 속성 조회

생성된 시퀀스의 속성 정보를 확인하려면 다음 구문을 사용합니다.

SELECT * FROM sys.sequences WHERE name = 'sequence_name';

매개변수 설명:

sequence_name: 속성을 확인하려는 시퀀스의 이름입니다.

예제

SELECT * 
FROM sys.sequences
WHERE name = 'contacts_seq';

이 예제는 sys.sequences 시스템 카탈로그에서 정보를 조회하여 contacts_seq 시퀀스에 대한 결과를 반환합니다.

sys.sequences 시스템 카탈로그에는 다음과 같은 열(column)들이 포함되어 있습니다.

열 이름설명
nameCREATE SEQUENCE 문으로 생성된 시퀀스의 이름
object_id시퀀스 객체의 ID
principal_id시퀀스 소유자(principal)의 ID
schema_id시퀀스가 속한 스키마의 ID
parent_object_id부모 객체의 ID
typeSO
type_descSEQUENCE_OBJECT
create_dateCREATE SEQUENCE 명령으로 시퀀스가 생성된 날짜/시간
modify_date시퀀스가 마지막으로 수정된 날짜/시간
is_ms_shipped0 또는 1 값
is_published0 또는 1 값
is_schema_published0 또는 1 값
start_value시퀀스의 시작 값
increment시퀀스의 증가/감소 규칙 값
minimum_value시퀀스의 최솟값
maximum_value시퀀스의 최댓값
is_cycling0 또는 1 값 (0 = NO CYCLE, 1 = CYCLE)
is_cached0 또는 1 값 (0 = NO CACHE, 1 = CACHE)
cache_sizeis_cached = 1일 때 캐시 버퍼의 크기
system_type_id시퀀스의 시스템 데이터 타입 ID
user_type_id시퀀스의 사용자 데이터 타입 ID
precision시퀀스 데이터 타입의 최대 정밀도
scale시퀀스의 최대 소수 자릿수
current_value시퀀스에서 마지막으로 반환된 값
is_exhausted0 또는 1 값 (0 = 시퀀스에 사용 가능한 값이 남아 있음, 1 = 값이 모두 소진됨)