[Oracle]_SEQUENCE (feat. 테이블 pk)

2022. 5. 24. 16:51[DB]/[Oracle]_DB

728x90
반응형

구조 : Oracle DB

framework: Mybatis

목적 : PK 이면서 값이 하나씩 또는 원하는 숫자만큼 증가해야하는 컬럼을 가진 테이블생성

 

ex) 테이블 고유 번호

 

기존 : 테이블을 추가 할 때마다 MAX 값에 +1 을 더하는 방식 차용

 

문제 발생 : 동시에 사용자가 접근 했을 때 같은 테이블 고유 번호가 입력 됨.

 

문제 해결 : 테이블 구조를 만들 때, 컴럼 추가시 자동으로 증가하는 pk 로 구성


시퀀스 등록

CREATE SEQUENCE BNO
START WITH 1
INCREMENT BY 1
NOMAXVALUE
NOMINVALUE;

 

BNO 라는 값은 SEQUENCE 로 등록 합니다.

시작은 1 증가 폭도 1로 설정하고

최대, 최소값은 리미트를 지정하지 않았습니다.

 

태이블 생성

CREATE TABLE board(
    BNO NUMBER PRIMARY KEY,
    TITLE VARCHAR2(20),
    CONTENT VARCHAR2(500),
    WRITER VARCHAR2(20),
    REGDATE varchar2(20),
    VIEWCNT VARCHAR2(100)
);

시퀀스 = BNO 를 PK 로 지정하고 사용합니다.

 

Mapper.xml

<insert id="boardWrite" parameterType="java.util.HashMap">
<selectKey resultType="int" keyProperty="bno" order="BEFORE">
    SELECT MAX(bno) + 1 FROM board
</selectKey>
    insert into board
        (
         bno,
         title,
         content,
         writer,
         regdate
         )
    values (
            BNO.NEXTVAL,
            #{title},
            #{content},
            #{writer},
            SYSDATE
            )
</insert>

insert 문 안에

BNO(Sequence).NEXTVAL

위의 값은 시퀀스 생성시 INCREMENT BY 값에 맞는 증가폭으로 저장됩니다.

 

감사합니다.

 

728x90
반응형