다른 명령
오라클 제약
- Constraint = 제약조건
- 테이블에 올바른 데이터만 입력 받고 잘못된 데이터는 들어오지 못하도록 칼럼마다 정하는 규칙
제약 종류
- NOT NULL -> null 값 입력 안됨
- UNIQUE -> 중복값 입력 안됨
- PRIMARY KEY -> NOT NULL + UNIQUE
- FOREIGN KEY -> 다른 테이블의 칼럼을 참조해 무결성 검사
- CHECK -> 설정된 값만 입력
제약조건 관리
- DISABLE NOVALIDATE 기본값, 제약조건이 없는 것과 동일하게 작동
- DISALBE VALIDATE 테이블의 내용 변경 안됨
- ENABLE NOVALIDATE 기존의 데이터는 검사하지 않고, 신규 데이터만 제약조건 검사해서 들어옴
- ENABLE VALIDATE 기존데이터와 신규데이터 모두 검사
Exceptions table 를 사용해 문제가 되는 행을 찾는다. (utlexcpt1.sql 스크립트를 통해 exception table 생성 후 사용)
제약조건 상태 조회
select table_name, constraint_name, column_name from user_cons_columns where table_name='테이블명' ;
- 테이블 생성시 제약조건 생성하는 예
CREATE TABLE hr.employee( id NUMBER (7) CONSTRAINT employee_id_pk PRIMARY KEY DEFERRABLE --> 나중에 모아서 제약조건 검사,IMMIDIATE 로 쓰면 입력될때마다 바로바로 제약조건검사 USING INDEX STORAGE (INITIAL 100K NEXT 100K) --> ASSM으로 자동적으로 설정되기 때문에 생략 가능 TABLESPACE ts_idx, --> 인덱스 테이블스페이스와 테이블스페이스 따로 분리 시켜야 함 last_name VARCHAR2 (25) CONSTRAINT employee_lastname_nn NOT NULL, dept_id NUMBER (7)) TABLESPACE users ; --> 인덱스 테이블스페이스와 테이블스페이스 따로 분리 시켜야 함
oracle constraint option
속성 | 값 | 설명 |
---|---|---|
DRRERRABLE | DEFERRABLE | 제약 조건 검사를 사용하여 트랜잭션이 끝날 때까지 연기 |
NOT DEFERRABLE | 트랜잭션이 끝날 때(COMMIT) 제약조건을 검사 | |
DEFAULT 값 | NOT DEFERRABLE | |
DFFERRED | INITIALLY IMMEDIATE | SQL 문장이 끝날 때 즉시 제약조건을 확인 |
INITIALLY DEFERRED | ||
VALIDATED | ENABLE VALIDATE | 기존 데이터와 새로운 데이터에 제약조건을 검사 |
ENABLE NOVALIDATE | 테이블의 기존 데이터는 제약조건 검사를 하지않고, 새로운 DML 작업부터 제약조건을 검사 |
- Syntax
[ [ [ NOT ] DEFERRABLE ] [ INITIALLY { IMMEDIATE | DEFERRED } ] | [ INITIALLY { IMMEDIATE | DEFERRED } ] [ [ NOT ] DEFERRABLE ] ] [ RELY | NORELY ] [ using_index_clause ] [ ENABLE | DISABLE ] [ VALIDATE | NOVALIDATE ] [ exceptions_clause ]