이 게시물은 Database GUI Oracle SQL Developer의 아래 버전 정보를 기준으로 작성되었습니다. Java(TM) 플랫폼 : 1.8.0_321 Oracle IDE : 4.1.5.21.78 |
기본 키(PRIMARY KEY)
설명
PRIMARY KEY(이하 PK)는 지정한 열이 유일한 값이면서 NULL을 허용하지 않는 제약 조건이다. 테이블에 하나만 지정 가능하다. 이는 PK가 하나라는 의미이며, PK를 구성하는 열은 여러 개일 수 있다는 의미이다.
문법
인라인(inline) 제약 조건 정의
-- 제약 조건 이름 미지정
CREATE TABLE [테이블명] (
[열이름] [자료형] PRIMARY KEY,
(...)
);
-- 제약 조건 이름 지정
CREATE TABLE [테이블명] (
[열이름] [자료형] CONSTRAINT [제약조건 이름] PRIMARY KEY,
(...)
);
아웃오브라인(out-of-line) 제약 조건 정의
-- 제약 조건 이름 미지정
CREATE TABLE [테이블명] (
[열이름] [자료형],
(...)
PRIMARY KEY ([열이름]),
);
-- 제약 조건 이름 지정
CREATE TABLE [테이블명] (
[열이름] [자료형],
(...)
CONSTRAINT [제약조건 이름] PRIMARY KEY ([열이름]),
);
* 열 여러 개를 PK로 지정할 시 아웃오브라인 제약 조건 정의 방식을 사용함.
사용 예시
테이블 생성 시 PK 지정
-- COL_ID 열에 PK 제약 조건 정의 (제약 조건 이름 미지정)
CREATE TABLE TB_STUDENT (
COL_ID VARCHAR2(10) PRIMARY KEY,
COL_NM VARCHAR2(20) NOT NULL
);
-- COL_ID 열에 PK 제약 조건 정의 (제약 조건 이름 지정)
CREATE TABLE TB_STUDENT2 (
COL_ID VARCHAR2(10) CONSTRAINT CONSTRAINT_ID PRIMARY KEY,
COL_NM VARCHAR2(20) NOT NULL
);
-- 아웃오브라인 제약 조건 정의 방식으로 열 2개에 PK 제약 조건 정의 (제약 조건 이름 미지정)
CREATE TABLE TB_CLASS (
COL_CLASS_CD VARCHAR2(10),
COL_IDX NUMBER(3),
COL_NM VARCHAR2(20) NOT NULL,
PRIMARY KEY(COL_CLASS_CD, COL_IDX)
);
-- 아웃오브라인 제약 조건 정의 방식으로 열 2개에 PK 제약 조건 정의 (제약 조건 이름 지정)
CREATE TABLE TB_CLASS2 (
COL_CLASS_CD VARCHAR2(10),
COL_IDX NUMBER(3),
COL_NM VARCHAR2(20) NOT NULL,
CONSTRAINT CONSTRAINT_IDX PRIMARY KEY(COL_CLASS_CD, COL_IDX)
);
PK의 중복 미허용 예시
-- PK 열이 2개인 TB_CLASS 테이블에 데이터 삽입
INSERT INTO TB_CLASS(COL_CLASS_CD, COL_IDX, COL_NM)
VALUES('A500', 100, '김경완');
INSERT INTO TB_CLASS(COL_CLASS_CD, COL_IDX, COL_NM)
VALUES('A500', 101, '임진섭');
INSERT INTO TB_CLASS(COL_CLASS_CD, COL_IDX, COL_NM)
VALUES('B500', 100, '권지수');
INSERT INTO TB_CLASS(COL_CLASS_CD, COL_IDX, COL_NM)
VALUES('B500', 101, '이희진');
SELECT * FROM TB_CLASS;
COL_CLASS_CD, COL_IDX가 중복되는 데이터가 있지만, 동일한 COL_CLASS_CD, COL_IDX 안에서 중복되지 않으므로 허용된다. 즉 PK를 구성하는 두 열 모두 중복이 되어야만 오류가 발생하는 것이다.
그렇다면 아래 두 쿼리를 실행해 보자.
INSERT INTO TB_CLASS(COL_CLASS_CD, COL_IDX, COL_NM)
VALUES('B500', 101, '남주현');
UPDATE TB_CLASS
SET COL_CLASS_CD = 'B500'
WHERE COL_NM = '임진섭';
이미 COL_CLASS_CD가 500이고, COL_IDX가 101인 '이희진' 레코드와 중복되기 때문에 두 쿼리는 오류를 발생시킨다.
PK의 NULL 미허용 예시
INSERT INTO TB_CLASS(COL_CLASS_CD, COL_IDX, COL_NM)
VALUES(NULL, 102, '김해준');
UPDATE TB_CLASS
SET COL_CLASS_CD = 'B500',
COL_IDX = NULL
WHERE COL_NM = '임진섭';
위 두 쿼리를 순차적으로 실행하면 아래와 같은 오류를 볼 수 있다. PK는 중복과 NULL을 둘 다 허용하지 않는다.
'개발 지식 > [DBMS] Oracle' 카테고리의 다른 글
[Oracle] 제약 조건(5) - 체크(CHECK) (0) | 2022.06.27 |
---|---|
[Oracle] 제약 조건(4) - 외래 키(FOREIGN KEY) (0) | 2022.06.26 |
[Oracle] 제약 조건(2) - UNIQUE (0) | 2022.06.24 |
[Oracle] 제약 조건(1) - 제약 조건(CONSTRAINT) 제어, NOT NULL (0) | 2022.06.23 |
[Oracle] DDL(8) - 시퀀스(SEQUENCE) (0) | 2022.06.22 |