DB/Oracle

Oracle SEQUENCE Vs Mysql AUTO_INCREMENT

Edward. K 2008. 7. 22. 14:08
반응형

Oracle  SEQUENCE Vs  Mysql  AUTO_INCREMENT

우선 테이블을 생성해 보자

더보기
CREATE TABLE `BOARD` (
         `SEQ` int(11) NOT NULL AUTO_INCREMENT,
         `NAME` varchar(10) NOT NULL,
         `PWD` varchar(10) NOT NULL,
         `TITLE` varchar(30) NOT NULL,
         `CONTENT` mediumtext NOT NULL,
         PRIMARY KEY  (`B_ID`)
)
더보기
CREATE TABLE BOARD
 (
          SEQ    NUMBER     PRIMARY KEY ,
          NAME    VARCHAR2(12 BYTE)    NOT NULL,
          PWD    VARCHAR2(12 BYTE)     NOT NULL,
          TITLE    VARCHAR2(50 BYTE)     NOT NULL,
          CONTENT     VARCHAR2(4000 BYTE)    NOT NULL
)

 Mysql AUTO_INCREMENT 를 함수를 활용하여 자동으로 변수값을 증가 시킬수가 있었다.
 Oracle 에는 이런 간단한 방법을 사용할수 없기에 Sequence를 만들어서 추가를 해야 한다.
 만들어 보자..

더보기
CREATE SEQUENCE BOARD_TEST_SEQ
START WITH  1              -- 시작번호
INCREMENT BY 1          -- 증가값
MAXVALUE     99999      -- 최대값
MINVALUE     1              -- 최소값  지정안해도 무관
CACHE        2               -- 시쿼스 변경시 자주 update되는 것을 방지하기위한 캐시값
NOCYCLE;        

  - 다음 일련번호의 산출   >   BOARD_TEST_SEQ.NextVal
  - 현재 일련번호의 산출   >   BOARD_TEST_SEQ.CurrVal
Use NextVal, CurrVal Query
 당연한 것이겠으나.. nextval, currval의 사용(불)가능 Query  구분

사용가능
    - 서브쿼리가아닌 select문
    - insert의 select 문
    - insert의 value문
    - update문의 set절

사용불가

    - view의 select절
    - distinct 키워드가 있는 select 문
    - group by, having, order by 절이 있는 select문
    - select, delete, update의 subquery
    - create table, alter table 명령의 default값

데이터를 입력해보자~

더보기
[Mysql]
            INSERT INTO
            BOARD ( seq, name, pwd, title, content)
            VALUES (null, '11','11','11','11')

 [Oracle]
            INSERT INTO
            BOARD ( seq, name, pwd, title, content)
            VALUES (BOARD_TEST_SEQ.NextVal, '11','11','11','11')

      

반응형