[MSSQL] SEQUENCE 사용하기
-- 시퀀스 생성
CREATE SEQUENCE SEQ_TEST START WITH 1;
-- 시퀀스 초기화
ALTER SEQUENCE SEQ_TEST RESTART WITH 1;
-- 시퀀스 가져오는 방법
SELECT NEXT VALUE FOR SEQ_TEST;
-- 시퀀스 삭제
DROP SEQUENCE SEQ_TEST;
시퀀스(Sequence)란?
시퀀스는 한 개의 테이블 내에서 유일값을 가질 수 있도록 별도의 순번을 관리하도록 하는 기법입니다. 만약, A라는 사람과 B라는 사람이 동시에 테이블에 데이터를 기입하는 경우 우선순위는 일반적으로 먼저 입력하는 사람에게 있습니다.
TB_STUDENT
학생 번호 | 학생 명 | ... |
1 | 고길동 | |
2 | 로이야 | |
3 | 노라라 | |
만약 위와 같이 학생 정보 (TB_STUDENT)라는 테이블이 있고, 여기에 새로 전학 온 "둘리", "또치"라는 학생이 있다고 가정했을때
1/ "둘리" 입력을 위해 현재 마지막 학생 번호 ▶ 노라라, 3번
2/ "둘리" 입력을 위해 마지막 학생 번호에서 + 1 ▶ 4번
3/ "둘리"를 4번으로 입력
4/ "또치" 입력을 위해 현재 마지막 학생 번호 ▶ 둘리, 4번
5/ "또치" 입력을 위해 마지막 학생 번호에서 + 1 ▶ 5번
6/ "또치"를 5번으로 입력
해당 방식은 직렬로 작업이 실행되었을 경우에 방법입니다. 하지만, 이는 "둘리"가 입력되는 동안 "또치"를 입력하는 걸 기다려야 합니다. 단순히 작은 작업에는 이와 같이 상관이 없지만, 전 세계 인구를 실시간으로 입력한다고 가정한다면, 이는 좋은 방법이 아니게 됩니다.
때문에 병렬로 데이터를 입력해야 하는데, 이때 동시에 입력이 되는 경우에는 번호가 말썽을 피웁니다.
1/ "둘리" 입력을 위해 현재 마지막 학생 번호 ▶ 노라라, 3번
2/ "또치" 입력을 위해 현재 마지막 학생 번호 ▶ 노라라, 3번
3/ "둘리" 입력을 위해 마지막 학생 번호에서 + 1 ▶ 4번
4/ "또치" 입력을 위해 마지막 학생 번호에서 + 1 ▶ 4번
5/ "둘리"를 4번으로 입력
6/ "또치"를 4번으로 입력
단순 작업에서는 많이 발생하지 않지만, 입력 전에 마지막 번호를 받은 상태에서 연산작업 후 입력을 하게 되거나 중간에 다른 작업을 대기하게 된다면 위와 같이 번호가 중복되어 입력되기도 합니다.
때문에 번호의 정합성을 높이기 위해, 관공서나 맛집에서 처럼 번호표를 미리 뽑아서 해당 번호로 입력되도록 하면 번호가 중복되지 않을 겁니다. 이 기법이 시퀀스 (Sequence)라고 보면 됩니다.
시퀀스(Sequence) 사용방법
1/ 시퀀스 생성
CREATE SEQUENCE 시퀀스명 START WITH 시작번호; |
2/ 시퀀스 가져오기
SELECT NEXT VALUE FOR 시퀀스명; |
※ Query를 호출할 때마다 결과 번호가 증가하는 것을 확인 가능합니다.
3/ 시퀀스 초기화
ALTER SEQUENCE 시퀀스명 RESTART WITH 초기화번호; |
※ 시퀀스 번호를 초기화하게 되고 다시 시퀀스를 호출하면 초기화된 번호부터 불러오게 됩니다.
4/ 시퀀스 삭제
DROP SEQUENCE 시퀀스명; |