[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
반응형
'[DB] > [Oracle]_DB' 카테고리의 다른 글
[Connect by]_ 계층형 쿼리 & 재귀 쿼리 응용 ( 이달의 휴일 구하기 ) (0) | 2022.11.28 |
---|---|
[connect_by]_ORACLE_계층 형 함수 사용(메뉴트리) (0) | 2022.11.21 |
[Oracle]_날자 , 요일 추출_그룹 핑 후 순번 매기기 (2) | 2022.10.25 |
[Oracle]_NVL 사용 (DATE,Number) 비교 (0) | 2022.08.29 |
[Oracle]SelectKey_사용하기 (feat. SEQUENCE) (0) | 2022.05.24 |