DB/ORACLE

오라클(Oracle) KEY 정리

devmean 2026. 7. 14. 18:27

PRIMARY KEY (기본키)

PRIMARY KEY는 테이블의 각 행(Row)을 유일하게 식별하는 키입니다.

특징

  • 중복 불가
  • NULL 불가
  • 테이블당 하나만 생성 가능
  • 자동으로 UNIQUE INDEX 생성

테이블 생성

 
CREATE TABLE MEMBER (
    MEMBER_ID NUMBER,
    NAME VARCHAR2(30),
    AGE NUMBER,
    CONSTRAINT PK_MEMBER PRIMARY KEY (MEMBER_ID)
);
 

정상 입력

 
INSERT INTO MEMBER VALUES (1, '홍길동', 30);

INSERT INTO MEMBER VALUES (2, '김철수', 28);

COMMIT;
 

조회 결과

 
SELECT * FROM MEMBER;
 
MEMBER_IDNAMEAGE
1 홍길동 30
2 김철수 28

중복 입력

 
INSERT INTO MEMBER VALUES (1, '이영희', 25);
 

실행 결과

ORA-00001: unique constraint (SCOTT.PK_MEMBER) violated
 

이미 MEMBER_ID가 1인 데이터가 존재하므로 오류가 발생합니다.


NULL 입력

 
INSERT INTO MEMBER (MEMBER_ID, NAME)
VALUES (NULL, '박민수');
 

실행 결과

ORA-01400: cannot insert NULL into ("SCOTT"."MEMBER"."MEMBER_ID")
 

PRIMARY KEY는 NULL을 허용하지 않습니다.


FOREIGN KEY (외래키)

FOREIGN KEY는 부모 테이블의 PRIMARY KEY를 참조하는 키입니다.

부모 테이블 생성

 
CREATE TABLE DEPARTMENT (

    DEPT_ID NUMBER,
    DEPT_NAME VARCHAR2(30),

    CONSTRAINT PK_DEPARTMENT
        PRIMARY KEY(DEPT_ID)

);
 

부모 데이터 입력

 
INSERT INTO DEPARTMENT VALUES (10,'개발팀');

INSERT INTO DEPARTMENT VALUES (20,'인사팀');

COMMIT;
 

자식 테이블 생성

 
CREATE TABLE EMPLOYEE (

    EMP_ID NUMBER,
    EMP_NAME VARCHAR2(30),
    DEPT_ID NUMBER,

    CONSTRAINT PK_EMPLOYEE
        PRIMARY KEY(EMP_ID),

    CONSTRAINT FK_EMPLOYEE_DEPT
        FOREIGN KEY(DEPT_ID)
        REFERENCES DEPARTMENT(DEPT_ID)

);
 

정상 입력

 
INSERT INTO EMPLOYEE
VALUES (100,'홍길동',10);

INSERT INTO EMPLOYEE
VALUES (101,'김철수',20);

COMMIT;
 

조회 결과

 
SELECT * FROM EMPLOYEE;
 
EMP_IDEMP_NAMEDEPT_ID
100 홍길동 10
101 김철수 20

존재하지 않는 부모키 입력

 
INSERT INTO EMPLOYEE
VALUES (102,'이영희',30);
 

실행 결과

ORA-02291: integrity constraint (SCOTT.FK_EMPLOYEE_DEPT) violated
- parent key not found
 

DEPARTMENT 테이블에 30번 부서가 없기 때문에 입력되지 않습니다.


UNIQUE KEY (고유키)

UNIQUE KEY는 중복을 허용하지 않는 키입니다.

테이블 생성

 
CREATE TABLE MEMBER2 (

    MEMBER_ID NUMBER,

    EMAIL VARCHAR2(100),

    CONSTRAINT PK_MEMBER2
        PRIMARY KEY(MEMBER_ID),

    CONSTRAINT UK_MEMBER2_EMAIL
        UNIQUE(EMAIL)

);
 

정상 입력

 
INSERT INTO MEMBER2
VALUES (1,'hong@test.com');

INSERT INTO MEMBER2
VALUES (2,'kim@test.com');

COMMIT;
 

조회 결과

MEMBER_IDEMAIL
1 hong@test.com
2 kim@test.com

중복 입력

 
INSERT INTO MEMBER2
VALUES (3,'hong@test.com');
 

실행 결과

ORA-00001: unique constraint (SCOTT.UK_MEMBER2_EMAIL) violated
 

동일한 이메일은 저장할 수 없습니다.


NULL 입력

 
INSERT INTO MEMBER2
VALUES (4,NULL);

INSERT INTO MEMBER2
VALUES (5,NULL);

COMMIT;
 

조회 결과

MEMBER_IDEMAIL
4 NULL
5 NULL

UNIQUE KEY는 NULL 값의 중복은 허용합니다.

반응형