③ 기본키
기본키Primary key라고도 하고 영어 그대로 ‘Primary key’라고 한다. 보통 테이블에 키를 생성했다라고 할 때, 이는 기본키를 의미한다. 기본키는 UNIQUE와 NOT NULL 속성을 동시에 가진 제약조건으로, 테이블 당 1개의 기본키만 생성할 수 있다.
컬럼명 데이터타입 PRIMARY KEY
혹은
CONSTRAINTS 제약조건명 PRIMARY KEY(컬럼명, ...)
오라클을 비롯한 여러 DBMS는 데이터 무결성을 보장하고 있는데, 데이터 무결성DataIntegrity이란 데이터의 정확성과 일관성을 유지한다는 뜻이다. 예를 들어, 사원 테이블(employees)에는 사번(employee_id)과 사원명(emp_name) 컬럼이 있는데 특정한 사람을 식별하려면 사번은 반드시 한 개이어야 한다. 만약 홍길동이란 사원의 사번이 두 개이거나 사번 자체가 들어가지 않고 데이터가 생성됐다면, 이 홍길동이란 사람을 정확히 식별할 수 있는 방법은 없다(물론 퇴사했다가 다시 입사한 경우 사번이 2개가 생길 수도 있는데, 이 경우에는 예전 사번이 있는 로우의 퇴사일자(retire_date) 컬럼에 데이터가 입력될 것이다). 이런 식으로 데이터 무결성을 DBMS에서 실질적으로 구현한 것이 바로 기본키(NOT NULL + UNIQUE)다.
입력
CREATE TABLE ex2_8 (
COL1 VARCHAR2(10) PRIMARY KEY,
COL2 VARCHAR2(10)
);
결과
table EX2_8이(가) 생성되었습니다.
입력
SELECT constraint_name, constraint_type, table_name, search_condition
FROM user_constraints
WHERE table_name = 'EX2_8';
결과
CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME SEARCH_CONDITION
--------------- --------------- ----------- ----------------
SYS_C0011180 P EX2_8
기본키는 constraint_type이 P(Primary key)로 생성된다.
입력
INSERT INTO ex2_8 VALUES ('', 'AA');
결과
SQL 오류: ORA-01400: NULL을 ("ORA_USER"."EX2_8"."COL1") 안에 삽입할 수 없습니다.
기본키는 NOT NULL 속성이므로 NULL 입력이 불가능하다.
입력
INSERT INTO ex2_8 VALUES ('AA', 'AA');
결과
1개 행 이(가) 삽입되었습니다.
입력
INSERT INTO ex2_8 VALUES ('AA', 'AA');
결과
SQL 오류: ORA-00001: 무결성 제약 조건(ORA_USER.SYS_C0011180)에 위배됩니다.
값이 같은 데이터 역시 입력할 수 없다.
예제에서는 COL1 컬럼을 기본키로 잡았는데, 여러 컬럼을 하나의 기본키로 만들 수도 있다. 이 경우에는 CONSTRAINTS 키워드를 사용해서 생성해야 한다. 예를 들어, 샘플 스키마에 있는 job_history 테이블의 기본키는 employee_id와 start_date며, 테이블 DDL을 보면 CONSTRAINT PK_JOB_HISTORY PRIMARY KEY (EMPLOYEE_ID, START_DATE)로 생성했음을 확인할 수 있다. 이 때 employee_id + start_date의 조합이 유일(UNIQUE)해야 하고, 두 컬럼에 NULL은 들어갈 수 없다. 기본키로 사용할 수 있는 컬럼 개수는 최대 32개다.
보통, 테이블을 만들 때 특수한 경우를 제외하고 기본키는 반드시 생성하는 것이 원칙이다.