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 값의 중복은 허용합니다.
반응형
'DB > ORACLE' 카테고리의 다른 글
| 오라클(Oracle) ORA-00257: archiver error 해결 방법 (0) | 2026.03.26 |
|---|---|
| 오라클(Oracle) SUBSTR vs REGEXP_SUBSTR 차이점 (0) | 2026.03.25 |
| 오라클(Oracle) 문자열 자르기 (0) | 2026.03.25 |
| 오라클(Oracle) 테이블 복사하기 (0) | 2026.03.24 |
| 오라클(Oracle) WITH 절(서브쿼리 팩토링) 사용법 (0) | 2026.03.24 |