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 (1, 1) NOT 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 (1000, 500) NOT NULL |
- 테이블 입력 결과 확인
SELECT * FROM dbo.성적 |
이름 | 점수 | 일련번호 |
이순신 | 100 | 1000 |
강감찬 | 80 | 1500 |
김유신 | 90 | 2000 |
[참고사항] identity 값 수정을 위해 ALTER COLUMN을 사용하지 않은 이유
예제와 같이 기존에 있던 컬럼에 identity를 수정하거나 새로운 identity를 거는 경우 ALTER COLUMN을 이용하면 오류가 발생합니다. 그 이유는 identity를 포함한 컬럼은 데이터를 수반하여 생성되기 때문인 것으로 추정됩니다. 따라서 예제와 같이 기존의 컬럼을 DROP COLUMN으로 삭제한 후 ADD 를 이용하여 새로운 컬럼을 만들어주셔야 합니다. |