본문 바로가기
DB

[Oracle] 오라클 seq 씨퀀스 사용하기

by 체리 2007. 3. 31.
반응형
해당 내용은 시퀸스 쿼리를 참조하기 위해 올립니다. 흠.."CREATE SEQUENCE MYSQ INCREMENT BY 1 START WITH 10000;"------------------------------------------------------- 안녕하세요? kimho입니다. 날씨가 더워지고 있습니다. 몸도 마음도 느슨해지기 쉬운 때입니다.   저도 그래서인지 강좌가 좀 늦어졌네요... 하하하 ....^^;   ...   웃음으로 때우려 해봤자 소용 없겠죠?   핑계가 안 통한다는 걸 알면서도 죄송한 마음에 핑계를 대게 됩니다....   강좌가 늦어지지 않도록 더욱 노력할께요... 화이링~~     오늘의 강좌는 오라클에서 시퀀스(Sequence) 사용하기입니다.   시퀀스라는 것은 자동 증가 칼럼을 만들 때 사용합니다.   예를 들어 사이트에 가입한 회원들에게 임의의 번호를 부여한다고 가정했을 때요...   일단 모든 회원은 서로 다른 회원번호를 가지고 있어야 합니다.   그래야 회원들이 동명이인이든 뭐든간에 구분해서 관리할 수 있으니까요.   그런데 여러분이 직접 일일이 가입하는 회원마다 번호를 만들어서 부여할 수는 없는 노릇입니다.   만약 하루에 회원이 100명씩 가입한다면   하루 내내 그 100명에게 중복되지 않은 회원번호를 찾아서 부여하는데 시간을 보낼 수는 없겠지요.   그래서 우리는 가입하는 회원마다 자동적으로 중복되지 않는 회원번호를 부여하도록 하기 위해   자동 증가 칼럼을 이용하는 것입니다.   무슨 말이냐면요...   만약 처음으로 회원이 한명 가입해서 그 회원에게 1이라는 회원번호가 부여되었다면,   그 다음으로 회원이 가입할 때는 가입과 동시에 저절로 2라는 번호가 부여되도록 하는 것입니다.   회원이 가입할 때마다 새로운 회원번호에는 기존 회원번호에서 증가된 값이 부여되도록 하면   회원번호가 중복되는 일이 생기지 않겠지요.   그것을 오라클에서는 시퀀스(Sequence)라는 것을 이용하여 구현하지요.   mySQL에서는 이와 같은 기능으로 auto_increment 속성이라는 것이 있습니다.   얼마 전에 했던 게시판 만들기 강좌에서 사용되었었지요... 기억나시죠?     자, 이제부터 시퀀스를 사용해보도록 하겠습니다.     그럼 테스트를 위해 임의의 테이블을 만들겠습니다.   SQL> CREATE TABLE SQTEST 2> (SQ_ID NUMBER, 3> SQ_NAME VARCHAR2(20));   테이블 이름은 SQTEST이고 칼럼에는 SQ_ID와 SQ_NAME이 있습니다.   이제 할 일은 시퀀스를 만드는 것입니다.   SQL> CREATE SEQUENCE MYSQ INCREMENT BY 1 START WITH 10000;   CREATE SEQUENCE 라는 문장을 사용하여 MYSQ라는 이름의 시퀀스를 만들었습니다.   이제부터 우리는 MYSQ를 사용하여 SQ_ID를 자동 증가 칼럼으로 사용하게 될 것입니다.   이 문장에서 INCREMENT BY 1 은 자동 증가 칼럼의 증가치가 1이라는 뜻이구요,   START WITH 10000은 자동 증가 칼럼이 10000부터 증가한다는 뜻입니다.   그럼 이 시점에서 새로운 데이터를 입력해 볼까요? 잘 보세요.   SQL> INSERT INTO SQTEST VALUES(MYSQ.NEXTVAL,'홍길동');   데이터를 하나 입력했습니다. MYSQ.NEXTVAL이라는 데이터를 입력했죠?   우리는 시퀀스를 사용할 때 NEXTVAL이라는 슈도 칼럼(Pseudo-column)을 사용합니다.   슈도 칼럼에 대한 얘기는 '오라클 rownum에 대하여'라는 강좌에서 잠깐 나왔었죠?   여기서는 그리 중요한 의미가 아니므로 그것에 대한 설명은 생락하겠습니다.   어쨌든 '시퀀스명.NEXTVAL'의 형태로 입력한다는 사실만 알아두시기 바랍니다.   그러면 현재 어떻게 값들이 입력되었는지 보도록 하겠습니다.   SQL> SELECT * FROM SQTEST;

SQ_ID

SQ_NAME

--------

--------------

10000

홍길동

  SQ_ID에는 10000 이라는 값이 들어갔고 SQ_NAME에는 '홍길동'이라는 값이 들어갔습니다.   이해가 되시나요?   한번 더 INSERT를 실행하면 아마 좀 더 이해가 되실겁니다.   SQL> INSERT INTO SQTEST VALUES(MYSQ.NEXTVAL,'고길동');   다시 결과를 보면,

SQ_ID

SQ_NAME

--------

--------------

10000
10001

홍길동
고길동

  SQ_ID에는 10000에서 1이 증가된 값인 10001이라는 값이 들어갔습니다.   이제 이해가 되시죠?   이런 식으로 계속 값을 넣다 보면 SQ_ID에는 언제나 서로 중복되지 않는 값이 들어가겠죠?     그런데 한가지 여러분께서 알아두셔야 할 사항이 있습니다.   SQ_ID에는 언제나 순차적인 값이 들어가는 것은 아니라는 것입니다.   무슨 말인지 모르시겠죠? 알 수가 없습니다. 제가 설명을 안했으니까요...   그럼 지금부터 자~알 보세요..   SQL> DELETE FROM SQTESET WHERE SQ_NAME='고길동';   이렇게 SQ_NAME이 '고길동'인 로우를 지웠습니다.   그러면 SQTEST라는 테이블에는 '홍길동'만이 들어있겠지요? 이렇게요..

SQ_ID

SQ_NAME

--------

--------------

10000

홍길동

  그리고 여기서 다시 새로운 데이터를 하나 넣겠습니다.   SQL> INSERT INTO SQTEST VALUES(MYSQ.NEXTVAL,'홍제동');   '홍제동'이라는 새로운 데이터를 넣었습니다.   여기서 잠깐 퀴~~즈!   SQTEST 테이블에는 이제 어떤 값들이 들어가 있을까요?   너무 쉽다구요..?   그러면 과연 여러분께서 예상했던 결과가 나오는지 확인해 보겠습니다.   SQL> SELECT * FROM SQTEST;

SQ_ID

SQ_NAME

--------

--------------

10000
10002

홍길동
홍제동

  보셨습니까?   SQ_ID에 10001이 아니라 10002가 들어가 있습니다. 이상하죠?   음... 왜 이런 결과가 나왔느냐 하면,   시퀀스는 그 특성상 일단 한번 증가하면 그 값이 절대 다시 줄어들지는 않습니다.   이 녀석은 오로지 증가밖에 할 줄 모르는 녀석이지요. 무대포에요..   "난 한 놈만 패!" 뭐 이런 거죠...   따라서 이전에 10001이라는 값이 한번 생겼었다면 10001이 지워져도,   그 다음엔 무조건 10002라는 값을 만드는 것입니다.   그러므로 여러분은 DELETE로 데이터를 하나 지웠다고해서   다른 시퀀스 값이 저절로 하나씩 감소해서 그 값을 채우지는 않는다는 것을 알아두시기 바랍니다.   아시겠죠?     그럼 오늘 강좌는 여기서 마치겠습니다.   이제는 우리가 헤어져야 할 시간~   다음에 또 만나요~     행복하세요~~



출처 : http://blog.naver.com/djllove/150001557510
반응형

'DB' 카테고리의 다른 글

[PostgreSQL] 설치하기 for Windows  (0) 2009.04.14
[PostgreSQL] 간단 사용법  (0) 2007.10.12
[Oracle] 변환함수 : TO_CHAR, TO_NUMBER,TO_DATE  (0) 2007.03.31
[Oracle] Index Rebuild  (0) 2007.03.31

댓글