지난 포스팅에 MySQL과 MS-SQL의 시퀀스 생성 및 초기화 방법에 대하여 알아보았습니다.
오라클도 같이 포스팅을 할까하다가 사용법이 살짝 달라서 별도의 포스팅을 하기로 했습니다.
2014/10/14 - [코드저장소/sql] - MySQL과 MSSQL의 시퀀스생성 및 초기화 하는방법에 대해서 알아보도록 하자
오라클이 아닌 MySQL과 MS-SQL sequence 처리방법은 위 링크를 참고해 주시면 되겠습니다.
오라클이 아닌 다른 DBMS들의 시퀀스들은 Create Table 을 해주었을때
자동증가 시키고자 하는 컬럼에 속성을 지정을 해주면 되었는데
오라클에는 CREATE TABLE이 아닌 CREATE SEQUENCE 명령을 이용하여 시퀀스를 별도로 생성 한 후,
테이블에 데이터 등록 시 생성된 시퀀스를 자동증가 시키고자 하는 컬럼에 적용을 해주면 되는 것입니다.
CREATE SEQUENCE 생성하고자하는시퀀스이름 START WITH 초기화숫자값 INCREMENT BY 증가값 MAXVALUE 최대값 또는 NOMAXVALUE -- 무한을의미 MINVALUE 최소값 또는 NOMINVALUE -- 무한을의미
위 구조를 이용하여 생성 해보도록 하겠습니다.
CREATE SEQUENCE SEQ START WITH 1 INCREMENT BY 1 NOMAXVALUE NOMINVALUE
최대 또는 최소값을 무한값으로 잡아주고, 시작값을 1,1씩증가에 대한 "SEQ"라는 시퀀스를 생성하었습니다.
이어서 시퀀스 테스트를 위하여 임의의 테이블을 하나 생성해도록 하겠습니다.
CREATE TABLE SEQUENCE_TABLE_ORACLE ( SEQ NUMBER PRIMARY KEY, TITLE VARCHAR(20) )
테이블 생성을 완료 하였다면 시퀀스와 생성된 테이블을 이용하여
INSERT문을 주어 데이터 등록을 해보죠.
등록하기전 간단하게 시퀀스에서 주로 사용되는 명령어 먼저 보시겠습니다.
INSERT문을 이용하여 시퀀스를 데이터에 등록시
시퀀스이름.NEXTVAL
이라는 명령어를 사용합니다
그리고 등록된 최종시퀀스를 확인하기 위해서는
SELECT 시퀀스이이름.CURRVAL FROM DUAL
와 같이 주시면 되겠습니다.
※ CURRVAL부분은 단독으로 사용이 불가능합니다.
만약 호출을 하시게 된다면
ORA-08002: sequence XXX.CURRVAL is not yet defined in this session
위 처럼 세션정의되지 않은 오류가 발생할것입니다.
CURRVAL은 NEXTVAL 이용한 다음 이어서 CURRVAL명령어를 사용해주시면 되겠습니다.
그럼 이제 "SEQUENCE_TABLE_ORACLE"테이블에 데이터를 INSERT 해보도록 하겠습니다.
INSERT INTO SEQUENCE_TABLE_ORACLE (SEQ,TITLE) VALUES(SEQ.NEXTVAL,'제목1'); INSERT INTO SEQUENCE_TABLE_ORACLE (SEQ,TITLE) VALUES(SEQ.NEXTVAL,'제목2'); INSERT INTO SEQUENCE_TABLE_ORACLE (SEQ,TITLE) VALUES(SEQ.NEXTVAL,'제목3');
INSERT문을 완료 하셨다면 실행결과를 보시겠습니다.
위처럼 자동증가 된것을 확인 할 수 있겠습니다.
오라클 시퀀스 관련해서 포스팅을 해보았습니다.
by 개발로짜
MSSQL,ORACLE을 이용하여 트리구조로 출력시켜주는 재귀쿼리를 만들어보자 (0) | 2014.10.26 |
---|---|
oracle,mssql,mysql 문자열 합치기 사용법을 비교해보자 (0) | 2014.10.17 |
MySQL과 MSSQL의 시퀀스생성 및 초기화 하는방법에 대해서 알아보도록 하자 (0) | 2014.10.14 |
MySQL- GROUP_CONCAT 함수로 세로로 출력된 결과를 하나의 컬럼에 가로로 출력하기 (0) | 2014.10.13 |
쿼리의 조건문 사용시 oracle에는 decode가있고 mysql에는 if가 있다 (0) | 2014.10.09 |
이번 다루어 보고자 할 주제는 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 |
이번에 포스팅 할 내용은 세로로 출력된 쿼리 결과를 하나의 컬럼값에 가로로 구분자를 주는 예를 들어볼까 합니다.
위 화면은 어느 사이트의 강좌별 진행일에 대한 내용을 캡처를 한것입니다.
보시면 요일별 구분자가 정해져 있는것을 확인하실 수 있습니다.
월
화
수
목
금
토
위처럼 쿼리 결과를 구분자를 이용하여
월,화,수,목,금,토
형식으로 지원을 해주는 것이
MySQL에서는 group_concat()이라는 함수입니다.
group_concat을 이용하면 for문을 사용해서 위처럼 가로로 출력할 필요(?)가 없어지겠죠? ㅎㅎ
그럼 group_concat에 대하여 알아보도록 하겠습니다.
group_concat(가로로 출력할 컬럼명 SEPARATOR '구분자')
위처럼 정해주면 되시겠습니다.
그렇다면 한번 기존에 존재하는 테이블 데이터중 아무거나 컬럼하나를 지정하여 쿼리결과를 가로로 변환해 보도록 하겠습니다.
위처럼 BOARD_NEW라는 테이블의 title 컬럼의 결과목록을 가로로 출력 해보도록 하겠습니다.
※ GROUP_CONCAT 함수의 SEPARATOR '구분자' 부분을 정의를 안하시면 DEFAULT 콤마(,)로 구분이 되어서
출력이 되어집니다. SEPARATOR 지정여부로 결과를 출력해보도록 하겠습니다.
SELECT GROUP_CONCAT(title) FROM board_new
SELECT GROUP_CONCAT(title SEPARATOR '|') FROM board_new
GROUP_CONCAT함수를 사용해서 위와같이 세로 결과를 하나의 컬럼에 가로로 구분자를 주어서 출력을 해보았습니다 ^^
by 개발로짜
오라클 시퀀스 생성법과 테이블에 등록시 시퀀스 자동증가등을 알아보자 (0) | 2014.10.15 |
---|---|
MySQL과 MSSQL의 시퀀스생성 및 초기화 하는방법에 대해서 알아보도록 하자 (0) | 2014.10.14 |
쿼리의 조건문 사용시 oracle에는 decode가있고 mysql에는 if가 있다 (0) | 2014.10.09 |
ORACLE/MYSQL/MSSQL 관계없이 CASE WHEN THEN ELSE END 사용하기 (0) | 2014.10.08 |
DBMS별 기존테이블 SELECT해서 새 테이블에 INSERT하여 데이터 일괄처리하기(oracle,mssql,mysql) (4) | 2014.10.08 |