IT

[MSSQL] 컬럼에 자동으로 증가값 부여하기 (IDENTITY)

피리부는 공대생 2022. 1. 27. 15:43

 IDENTITY 문이란?

 
​   레코드가 추가될 때마다 자동으로 증가값이 부여되도록 하는 제약조건입니다.
   MYSQL의 AUTO_INCREMENT, 오라클의 SEQUENCE와 비슷한 역활을 합니다.

 

 - 테이블 생성시 IDENTITY 가 설정된 컬럼을 포함하는 방법



   CREATE TABLE [테이블명] (
       [컬럼명] [숫자형 데이터형식] IDENTITY ([초기값][증가값][제약조건]
   )

 

 IDENTITY 가 설정된 컬럼 추가방법

 
   ALTER TABLE [테이블명] ADD [컬럼명] [숫자형 데이터형식] IDENTITY ([초기값][증가값]) [제약조건]

 

 - 테이블 생성



   CREATE TABLE dbo.성적 (
       일련번호 int IDENTITY (11NOT NULL,
       이름 varchar(6) NOT NULL,
       점수 int NOT NULL
   )

 

 - 데이터 입력



   INSERT INTO dbo.성적 (이름점수) VALUES ('이순신'100)
   INSERT INTO dbo.성적 (이름점수) VALUES ('강감찬', 80)
   INSERT INTO dbo.성적 (이름점수) VALUES ('김유신'90)
 

 

 - 테이블 입력 결과 확인



   SELECT * FROM dbo.성적
 

일련번호 이름 점수
1 이순신 100
2 강감찬 80
3 김유신 90

 

[참고사항] 일련번호를 INSERT 하지 않았으나 데이터가 들어가 있는 이유



​   INSERT 문에서는 일련번호에 대한 값을 넣지 않았으나 테이블을 생성할 때 IDENTITY를 설정하였기 때문에 자동으로 증가값이
   들어가게 됩니다. (오히려 INSERT 문에서 일련번호에 값을 넣으려고 하면 오류가 발생하니 주의하시기 바랍니다)

 

 - 예제



   성적 테이블에 일련번호에 설정된 identity의 초기값 1, 증가값 1을 초기값 1000, 증가값 500으로 수정하시오.
 

 

 - 예제 쿼리

 

 
   ALTER TABLE dbo.성적 DROP COLUMN 일련번호
   ALTER TABLE dbo.성적 ADD 일련번호 int IDENTITY (1000500NOT NULL

 

 - 테이블 입력 결과 확인



   SELECT * FROM dbo.성적
 

 

이름 점수 일련번호
이순신 100 1000
강감찬 80 1500
김유신 90 2000

 

[참고사항] identity 값 수정을 위해 ALTER COLUMN을 사용하지 않은 이유



​   예제와 같이 기존에 있던 컬럼에 identity를 수정하거나 새로운 identity를 거는 경우 ALTER COLUMN을 이용하면 오류가 발생합니다.
   그 이유는 identity를 포함한 컬럼은 데이터를 수반하여 생성되기 때문인 것으로 추정됩니다.
   따라서 예제와 같이 기존의 컬럼을 DROP COLUMN으로 삭제한 후 ADD 를 이용하여 새로운 컬럼을 만들어주셔야 합니다.