이번 다루어 보고자 할 주제는 MySQL과 MS-SQL의 시퀀스생성 및 초기화에 대해서 포스팅을 해볼까 합니다.
MySQL의 경우 시퀀스 생성이 간단합니다.
테이블 생성 시 auto_increment라는 속성을 시퀀스로 지정해줄 컬럼에 적용만 해주면 됩니다.
예를들어보도록 하겠습니다.
CREATE TABLE sequence_table( seq int auto_increment primary key, title varchar(20) )
위와같이 임의의 테이블을 생성해보았습니다.
코드를 보시면 seq 컬럼에 auto_increment라는 속성이 지정되어있습니다.
INSERT 문을 통해서 title 컬럼만 데이터 추가를 해주면 알아서 seq 컬럼에는 1씩 자동증가하는 넘버가 부여가 됩니다.
한번 데이터를 삽입해보도록 하겠습니다.
insert into sequence_table(title) values('제목1'); insert into sequence_table(title) values('제목2');
title 컬럼만 insert함으로써 seq컬럼에 자동으로 1씩증가되어 등록이 되었습니다.
하지만 현재 상태에서 모든 데이터들을 삭제를 한다음에 다시 insert 쿼리를 시도 하게 된다면
seq컬럼에 insert되는 데이터는 3부터 등록이 되게 됩니다.
뭐 문제는 없지만 초기화를 간혹가다 원하는 경우가 생기기 때문에
이번에는 시퀀스 초기화에 대해서 알아보도록 하겠습니다
ALTER TABLE sequence_table auto_increment=1;
위처럼 ALTER TABLE 문을 이용하여 AUTO_INCREMENT를 초기화 하고자 하는 숫자값을 지정해주면 됩니다.
※ 만약 모든 데이터를 삭제하지 않고 1~10까지 증가된 데이터들은 남겨 놓았다고 가정을 한다면
"AUTO_INCREMENT = 11" 로 지정을 해주셔야 겠죠??
위 명령을 지정해준 후 다시 한번 데이터를 insert 해보았습니다.
insert into sequence_table(title) values ('aaaa'); insert into sequence_table(title) values ('bbbb');
위와같이 정상적으로 시퀀스값이 초기화 된것을 확인할 수 있습니다.
MS-SQL 역시 MySQL과 동일하게 CREATE TABLE 생성시 증가시키고자 하는 컬럼에 AUTO_INCREMENT 대신 IDENTITY()라는 속성을 지정해주면 됩니다.
이부분 역시 예를 들어보도록 하겠습니다.
CREATE TABLE sequence_table_mssql( seq int identity(1,1) primary key, title varchar(20) )
위와같이 테이블 생성문을 실행 하셨다면 데이터를 등록해보도록 하겠습니다.
insert into sequence_table_mssql(title) values('시퀀스타이틀1'); insert into sequence_table_mssql(title) values('시퀀스타이틀2');
결과는 MySQL과 동일합니다.
마지막으로 MS-SQL의 시퀀스를 초기화 하는 방법을 설명드리겠습니다.
MySQL에 경우에는 ALTER TABLE문으로 시퀀스를 초기화 해주었지만
MS-SQL 시퀀스는 MySQL과는 다르게 "DBCC CHECKIDENT함수(?)를 이용하여 초기화를 하시면 되겠습니다.
DBCC CHECKIDENT('sequence_table_mssql', RESEED, 0)
위와 같은 명령어를 주시면 되겠습니다.
MS-SQL의 시퀀스가 정상적으로 이루어졌는지 데이터 삭제및 등록에 대해서는 생략하겠습니다.
결과가 MySQL의 예제와 동일하기 때문입니다 .
오라클은 시퀀스가 별도로 생성되기때문에
다음포스팅에 이어서 진행하도록 하겠습니다.
by 개발로짜
oracle,mssql,mysql 문자열 합치기 사용법을 비교해보자 (0) | 2014.10.17 |
---|---|
오라클 시퀀스 생성법과 테이블에 등록시 시퀀스 자동증가등을 알아보자 (0) | 2014.10.15 |
MySQL- GROUP_CONCAT 함수로 세로로 출력된 결과를 하나의 컬럼에 가로로 출력하기 (0) | 2014.10.13 |
쿼리의 조건문 사용시 oracle에는 decode가있고 mysql에는 if가 있다 (0) | 2014.10.09 |
ORACLE/MYSQL/MSSQL 관계없이 CASE WHEN THEN ELSE END 사용하기 (0) | 2014.10.08 |