자료를 입력할 때 INSERT를 이용하여 1,2,3,4... 이렇게 입력할 것입니다. 하지만 많은 데이터를 입력할 땐 숫자를 입력하지 않고 입력할 수도 있고, 뛰어 넘어 빈 공간을 만들수도 있습니다.
그래서 사용 가능한 SQL 기능이 IDENTITY와 SEQUENCE입니다.
먼저 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를 사용하게 됩니다.
기존에 사용했던 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 사용이 권장됩니다.
너무 훌륭하신분 같아요,,,