⬛오라클의 식별자 컬럼(IDENTITY COLUMNS)
--테이블을 생성할 때 행에 구분하기 위한 컬럼값을 저장하기 위해 컬럼에 PRIMARY KEY 제약조건 부여
--일반적으로 PRIMARY KEY 제약조건을 부여한 컬럼에는 자동 증가값을 제공받아 저장하여 사용
--자동 증가값을 제공받아 사용하기 위해 일반적으로 사용하는 방법은 SEQUENCE 객체 사용
('SEQUENCE ' 클릭하면 그에 대한 포스팅으로 이동함)
그러나 오라클 12C 이상의 버전부터는 테이블 생성시 컬럼값이 자동 증가되는 기능을 컬럼에 부여 가능
(이 기능이 바로 식별자 컬럼)
형식) CREATE TABLE 테이블명(컬럼명 자료형 GENERATED {ALWAYS|BY DEFAULT|BY DEFAULT ON NULL} AS IDENTITY [(옵션)],컬럼명 자료형,...)
--자동 증가 기능을 부여하기 위해 컬럼의 자료형은 반드시 숫자형(NUMBER)으로 설정
🔘GENERATED ALWAYS AS IDENTITY : 반드시
자동 증가값을 제공받아 컬럼값으로 저장하며 사용자의 의해 컬럼값 저장 불가능 - 기본
🔘 GENERATED BY DEFAULT AS IDENTITY : 자동 증가값을 제공받아 컬럼값으로 저장하며 사용자의 의해 컬럼값 저장 가능 - NULL 미허용
🔘 GENERATED BY DEFAULT ON NULL AS IDENTITY : 자동 증가값을 제공받아 컬럼값으로 저장하며 사용자의 의해 컬럼값 저장 가능 - NULL 허용
🔘 IDENTITY 옵션
MINVALUE 최소값(생략시 기본값 : 1)
MAXVALUE 최대값(생략시 기본값 : 오라클의 숫자의 최대값)
START WITH 시작값(생략시 기본값 : 1)
INCREMENT BY 증가값(생략시 기본값 : 1)
{CYCLE|NOCYCLE}(생략시 기본값 : NOCYCLE) 등..
예제👩💻
식별자 컬럼을 사용하지 않았을 경우, NO 컬럼에 매번 직접 숫자를 부여해야함.
--BOARD1 테이블 생성 - 글번호(숫자형-PRIMARY KEY,작성자(문자형),내용(문자형)
CREATE TABLE BOARD1(NO NUMBER CONSTRAINT BOARD_NO_PK PRIMARY KEY, WRITER VARCHAR2(50), CONTENT VARCHAR2(1000));
--BOARD1 테이블에 행(게시글) 삽입 - 글번호를 전달받아 삽입 처리
INSERT INTO BOARD1 VALUES(1,'홍길동','첫번째 게시글입니다.');
INSERT INTO BOARD1 VALUES(2,'임꺽정','두번째 게시글입니다.');
INSERT INTO BOARD1 VALUES(3,'전우치','세번째 게시글입니다.');
SELECT * FROM BOARD1;
COMMIT;
그런데 아래와 같이 테이블 생성 시, NO 컬럼에 식별자 컬럼 기능을 사용하면 행을 삽입 할 때 NO컬럼을 생략해도 결과는 숫자가 자동 증가되어 나옴.
--BOARD2 테이블 생성 - 글번호(숫자형-PRIMARY KEY,작성자(문자형),내용(문자형)
CREATE TABLE BOARD2(NO NUMBER GENERATED ALWAYS AS IDENTITY
CONSTRAINT BOARD2_NO_PK PRIMARY KEY, WRITER VARCHAR2(50), CONTENT VARCHAR2(1000));
--BOARD2 테이블에 행(게시글) 삽입 - NO 컬럼을 생략하면 자동 증가값을 제공받아 저장
INSERT INTO BOARD2(WRITER,CONTENT)VALUES('홍길동','첫번째 게시글입니다.');
INSERT INTO BOARD2(WRITER,CONTENT)VALUES('임꺽정','두번째 게시글입니다.');
INSERT INTO BOARD2(WRITER,CONTENT)VALUES('전우치','세번째 게시글입니다.');
SELECT * FROM BOARD2;
COMMIT;
▶️ 위 결과에서 25번부터 시작된 이유는 이 테이블로 다른 작업들을 많이 해놔서 그런거임.
처음 만든 테이블이라면 1부터 시작되서 알아서 2, 3, 4 값이 증가됨.
+ 참고할 만한 글⬇️
http://ojc.asia/bbs/board.php?bo_table=Oracle11&wr_id=20
오라클 식별자 컬럼(Oracle Identity Columns), GENERATED AS IDENTITY
오라클 식별자 컬럼(Oracle Identity Columns), GENERATED AS IDENTITY오라클 12C는 PK 값을 자동으로 증분하면서 생성할 수 있는 식별자컬럼identity column을 도입 했습니다. MySQL의 AUTO_INCREMENT 컬럼 또는 MS SQL Serve
ojc.asia
'Database > Oracle' 카테고리의 다른 글
[SQL-Oracle]뷰(VIEW) - 단순뷰, 복합뷰, 인라인뷰 (1) | 2023.12.07 |
---|---|
[SQL-Oracle]시퀀스(SEQUENCE) (0) | 2023.12.07 |
[SQL-Oracle]DDL-ALTER(변경) (0) | 2023.12.07 |
[SQL-Oracle]DDL-DROP, TRUNCATE(삭제) (1) | 2023.12.06 |
[SQL-Oracle]DDL-CREATE(서브쿼리 사용) (1) | 2023.12.06 |