상세 컨텐츠

본문 제목

[ORACLE] MySQL에는 AUTO_INCREMENT가 있지만..

CS구멍/데이터베이스💿

by :Eundms 2024. 3. 16. 21:57

본문

오라클DB(12.1버전 이전)에는 auto_increment 기능이 없다

 

그래서, 시퀀스/트리거를 생성해서 사용해야 한다.

12.1버전부터 지원하는 auto increment 은 내부적으로 시퀀스를 이용한다고 한다

 

시퀀스 이용

시퀀스 생성 방법

CREATE SEQUENCE TEST_SEQ 
START WITH 1 
INCREMENT BY 1 
MAXVALUE 9999 
NOCYCLE 
NOCACHE;

cycle : 최소, 최대값에 다다르면 start with 값으로 되돌아감

nocycle : 최소, 최대값에 다다르면 에러가 발생

cache : 메모리상의 시퀀스 값을 관리

 

drop sequence 시퀀스명;

 

alter sequnce 시퀀스명 ...; -- start with는 수정 불가능

 

select 시퀀스명.nextval from dual;

select 시퀀스명.currval from dual;

 

 

시퀀스를 사용한 값 삽입 방법

INSERT INTO TEST(ID, NAME) VALUES(TEST_SEQ.NEXTVAL, "eundms");

 

 

시퀀스 초기화 방법 

1) 시퀀스 현재값 확인

SELECT LAST_NUMBER FROM USER_SEQUENCES WHERE SEQUENCE_NAME = 'TEST_SEQ';

 

2) 시퀀스의 Increment를 현재값만큼 빼도록 설정 (시퀀스의 최대값으로 설정)

ALTER SEQUENCE TEST_SEQ INCREMENT BY -7;

 

3) 시퀀스에서 다음 값을 가져옴

SELECT TEST_SEQ.NEXTVAL FROM DUAL;

 

4) 시퀀스 INCREMENT 값을 1로 설정

ALTER SEQUENCE TEST_SEQ INCREMENT BY 1;

트리거 사용

CREATE OR REPLACE TRIGGER TEST_BEFORE_INSERT
BEFORE INSERT ON TEST            -- 'TEST' 테이블에 삽입하기 전에 실행
FOR EACH ROW                      -- 각 행에 대해 실행
BEGIN
    SELECT TEST_SEQ.NEXTVAL       -- 시퀀스에서 다음 값을 가져옴
    INTO   :new.id                -- 새 행의 'id' 컬럼에 삽입
    FROM   dual;
END;

IDENTITY 컬럼 (12c버전부터 사용가능)

CREATE TABLE test (
    id NUMBER GENERATED BY DEFAULT AS IDENTITY
    START WITH 1000 INCREMENT BY 1,
    name VARCHAR2(100)
);

INSERT INTO test (name) VALUES ('eundms');

[출처]

https://suover.com/oracle-%EC%98%A4%EB%9D%BC%ED%81%B4-%EC%9E%90%EB%8F%99%EC%A6%9D%EA%B0%80-auto_increment-%EB%B0%A9%EB%B2%95-%EC%A0%95%EB%A6%AC/

관련글 더보기

댓글 영역