IDENTITY, SEQUENCE를 알아보자

Juvvan·2023년 3월 6일
1

MSSQL

목록 보기
1/1

자료를 입력할 때 INSERT를 이용하여 1,2,3,4... 이렇게 입력할 것입니다. 하지만 많은 데이터를 입력할 땐 숫자를 입력하지 않고 입력할 수도 있고, 뛰어 넘어 빈 공간을 만들수도 있습니다.

그래서 사용 가능한 SQL 기능이 IDENTITY와 SEQUENCE입니다.

IDENTITY

먼저 IDENTITY를 배워보겠습니다. 먼저 가상의 TEST라는 테이블을 만들어 볼게요.

CREATE TABLE TEST
(
TESTNO INT,
TESTNAME VARCHAR(20),
TESTINFO NVARCHAR(MAX),
TESTTIME DATETIME,
PRIMARY KEY(TESTNO)
);

다른 튜플들과 비교할 수 있는 기본키를 TESTNO로 지정하였습니다. TESTNO에 INSERT로 값을 넣어도 되지만, 한번 자동완성 기능을 하는 IDENTITY를 입력해보도록 하죠. IDENTITY는 CREATE 할때 같이 입력합니다.

CREATE TABLE TEST
(
TESTNO INT IDENTITY(1,1), (시작값,증가값)
TESTNAME VARCHAR(20),
TESTINFO NVARCHAR(MAX),
TESTTIME DATETIME,
PRIMARY KEY(TESTNO)
);

이렇게 테이블을 만들고 INSERT로 테이블을 채워봅니다.

INSERT INTO TEST
(
TESTNAME,
TESTINFO,
TESTTIME
)
VALUES
(
'TEST001',
N'첫번째 테스트',
GETDATE()
);

실행을 하게 되면 이러한 결과를 얻게 됩니다.

여러번 반복하여 실행하면 TESTNO이 1씩 숫자가 추가됩니다.

좋은 기능으로 보이는 IDENTITY지만 문제점이 존재합니다. 테이블에 종속되어 있기 때문에 수정할 때 곤란한 일이 생길 수 있고, 데이터를 삭제하고 다시 채울때 어렵다는 것입니다.

이를 해결하기 위해 SEQUENCE를 사용하게 됩니다.

SEQUENCE

기존에 사용했던 TEST TABLE 을 삭제하고 처음에 사용했던 테이블을 만들어보겠습니다.

CREATE TABLE TEST
(
TESTNO INT,
TESTNAME VARCHAR(20),
TESTINFO NVARCHAR(MAX),
TESTTIME DATETIME,
PRIMARY KEY(TESTNO)
);

이제 이 테이블에 적용 가능한 SEQUENCE를 만들어 보겠습니다.
SEQUENCE는 CREATE에 넣지 않습니다. 그렇기 때문에 테이블에 종속되지 않고, 다른 곳에서도 사용이 가능하다는 장점이 있습니다.

CREATE SEQUENCE TESTSEQ
AS INT
START WITH 1 시작값
INCREMENT BY 1 증가값
MINVALUE 1 최소값
MAXVALUE 10000 최대값
NO CYCLE 순환여부

이렇게 하면 개체탐색기 - DB - 프로그래밍 기능 - 시퀸스에 TESTSEQ가 저장됩니다.

이제 INSERT로 TESTSEQ를 작동해보겠습니다.

INSERT INTO TEST
(
TESTNO,
TESTNAME,
TESTINFO,
TESTTIME
)
VALUES
(
NEXT VALUE FOR TESTSEQ,
'TEST001',
N'첫번째 테스트',
GETDATE()
);

실행하면 다음과 같은 값을 얻게 됩니다.

다른 DB에서도 사용 가능하기 SEQUENCE 사용이 권장됩니다.

profile
자꾸 아이디를 고치래

2개의 댓글

comment-user-thumbnail
2023년 3월 6일

너무 훌륭하신분 같아요,,,

1개의 답글