"Oracle 제약조건"의 두 판 사이의 차이
DB CAFE
(→제약조건 상태 조회) |
|||
(사용자 2명의 중간 판 26개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | = | + | == 오라클 제약 == |
+ | * Constraint = 제약조건 | ||
+ | * 테이블에 올바른 데이터만 입력 받고 잘못된 데이터는 들어오지 못하도록 칼럼마다 정하는 규칙 | ||
+ | === 제약 종류 === | ||
+ | # NOT NULL -> null 값 입력 안됨 | ||
+ | # UNIQUE -> 중복값 입력 안됨 | ||
+ | # PRIMARY KEY -> NOT NULL + UNIQUE | ||
+ | # FOREIGN KEY -> 다른 테이블의 칼럼을 참조해 무결성 검사 | ||
+ | # CHECK -> 설정된 값만 입력 | ||
− | {| class="wikitable" | + | === 제약조건 관리 === |
+ | |||
+ | - DISABLE NOVALIDATE | ||
+ | 기본값, 제약조건이 없는 것과 동일하게 작동 | ||
+ | |||
+ | - DISALBE VALIDATE | ||
+ | 테이블의 내용 변경 안됨 | ||
+ | |||
+ | - ENABLE NOVALIDATE | ||
+ | 기존의 데이터는 검사하지 않고, 신규 데이터만 제약조건 검사해서 들어옴 | ||
+ | |||
+ | - ENABLE VALIDATE | ||
+ | 기존데이터와 신규데이터 모두 검사 | ||
+ | |||
+ | Exceptions table 를 사용해 문제가 되는 행을 찾는다. (utlexcpt1.sql 스크립트를 통해 exception table 생성 후 사용) | ||
+ | |||
+ | === 제약조건 상태 조회 === | ||
+ | <source lang=sql> | ||
+ | select table_name, constraint_name, column_name | ||
+ | from user_cons_columns | ||
+ | where table_name='테이블명' ; | ||
+ | </source> | ||
+ | |||
+ | * 테이블 생성시 제약조건 생성하는 예 | ||
+ | <source lang=sql> | ||
+ | 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 ; --> 인덱스 테이블스페이스와 테이블스페이스 따로 분리 시켜야 함 | ||
+ | </source> | ||
+ | |||
+ | === oracle constraint option === | ||
+ | |||
+ | {| class="wikitable" style="color:green; background-color:#ffffcc;" cellpadding="10" | ||
|- | |- | ||
− | ! 속성 ! | + | ! style="text-align:center;"|속성 |
+ | ! style="text-align:center;"|값 | ||
+ | ! style="text-align:center;"|설명 | ||
+ | |||
|- | |- | ||
| rowspan="3"|DRRERRABLE | | rowspan="3"|DRRERRABLE | ||
− | + | ||
+ | || DEFERRABLE || 제약 조건 검사를 사용하여 트랜잭션이 끝날 때까지 연기 | ||
|- | |- | ||
||NOT DEFERRABLE || 트랜잭션이 끝날 때(COMMIT) 제약조건을 검사 | ||NOT DEFERRABLE || 트랜잭션이 끝날 때(COMMIT) 제약조건을 검사 | ||
|- | |- | ||
||DEFAULT 값 || NOT DEFERRABLE | ||DEFAULT 값 || NOT DEFERRABLE | ||
+ | |||
|- | |- | ||
− | | DFFERRED || INITIALLY IMMEDIATE || SQL 문장이 끝날 때 즉시 제약조건을 확인 | + | | rowspan="2" |DFFERRED |
+ | || INITIALLY IMMEDIATE || SQL 문장이 끝날 때 즉시 제약조건을 확인 | ||
|- | |- | ||
− | + | || INITIALLY DEFERRED || | |
+ | |||
|- | |- | ||
− | | VALIDATED || ENABLE VALIDATE || 기존 데이터와 새로운 데이터에 제약조건을 검사 | + | | rowspan="2" |VALIDATED |
+ | || ENABLE VALIDATE || 기존 데이터와 새로운 데이터에 제약조건을 검사 | ||
|- | |- | ||
− | + | || ENABLE NOVALIDATE || 테이블의 기존 데이터는 제약조건 검사를 하지않고, 새로운 DML 작업부터 제약조건을 검사 | |
|- | |- | ||
|} | |} | ||
+ | * Syntax | ||
+ | <source lang=sql> | ||
[ [ [ NOT ] DEFERRABLE ] | [ [ [ NOT ] DEFERRABLE ] | ||
34번째 줄: | 90번째 줄: | ||
[ VALIDATE | NOVALIDATE ] | [ VALIDATE | NOVALIDATE ] | ||
[ exceptions_clause ] | [ exceptions_clause ] | ||
+ | |||
+ | </source> | ||
+ | [[Category:oracle]] |
2023년 4월 2일 (일) 23:58 기준 최신판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
1 오라클 제약[편집]
- Constraint = 제약조건
- 테이블에 올바른 데이터만 입력 받고 잘못된 데이터는 들어오지 못하도록 칼럼마다 정하는 규칙
1.1 제약 종류[편집]
- NOT NULL -> null 값 입력 안됨
- UNIQUE -> 중복값 입력 안됨
- PRIMARY KEY -> NOT NULL + UNIQUE
- FOREIGN KEY -> 다른 테이블의 칼럼을 참조해 무결성 검사
- CHECK -> 설정된 값만 입력
1.2 제약조건 관리[편집]
- DISABLE NOVALIDATE 기본값, 제약조건이 없는 것과 동일하게 작동
- DISALBE VALIDATE 테이블의 내용 변경 안됨
- ENABLE NOVALIDATE 기존의 데이터는 검사하지 않고, 신규 데이터만 제약조건 검사해서 들어옴
- ENABLE VALIDATE 기존데이터와 신규데이터 모두 검사
Exceptions table 를 사용해 문제가 되는 행을 찾는다. (utlexcpt1.sql 스크립트를 통해 exception table 생성 후 사용)
1.3 제약조건 상태 조회[편집]
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 ; --> 인덱스 테이블스페이스와 테이블스페이스 따로 분리 시켜야 함
1.4 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 ]