행위

"Oracle 제약조건"의 두 판 사이의 차이

DB CAFE

(제약조건 상태 조회)
 
(사용자 2명의 중간 판 20개는 보이지 않습니다)
1번째 줄: 1번째 줄:
= oracle constraint option =
+
== 오라클 제약 ==
 +
* 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 생성 후 사용)
 +
 +
=== 제약조건 상태 조회 ===
 +
<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"
 
{| 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|| DEFERRABLE || 제약 조건 검사를 사용하여 트랜잭션이 끝날 때까지 연기
+
 
 +
|| DEFERRABLE || 제약 조건 검사를 사용하여 트랜잭션이 끝날 때까지 연기
 
|-
 
|-
 
||NOT DEFERRABLE || 트랜잭션이 끝날 때(COMMIT) 제약조건을 검사
 
||NOT DEFERRABLE || 트랜잭션이 끝날 때(COMMIT) 제약조건을 검사
 
|-
 
|-
 
||DEFAULT 값 || NOT DEFERRABLE
 
||DEFAULT 값 || NOT DEFERRABLE
 +
 
|-
 
|-
 
| rowspan="2" |DFFERRED  
 
| rowspan="2" |DFFERRED  
|DFFERRED || INITIALLY IMMEDIATE || SQL 문장이 끝날 때 즉시 제약조건을 확인
+
|| INITIALLY IMMEDIATE || SQL 문장이 끝날 때 즉시 제약조건을 확인
 
|-
 
|-
 
|| INITIALLY DEFERRED ||   
 
|| INITIALLY DEFERRED ||   
 +
 
|-
 
|-
 
| rowspan="2" |VALIDATED
 
| rowspan="2" |VALIDATED
|VALIDATED  || ENABLE VALIDATE || 기존 데이터와 새로운 데이터에 제약조건을 검사
+
|| ENABLE VALIDATE || 기존 데이터와 새로운 데이터에 제약조건을 검사
 
|-
 
|-
| VALIDATED || ENABLE NOVALIDATE || 테이블의 기존 데이터는 제약조건 검사를 하지않고, 새로운 DML 작업부터 제약조건을 검사
+
|| ENABLE NOVALIDATE || 테이블의 기존 데이터는 제약조건 검사를 하지않고, 새로운 DML 작업부터 제약조건을 검사
 
|-
 
|-
 
|}
 
|}
  
 +
* Syntax
 +
<source lang=sql>
  
 
[ [ [ NOT ] DEFERRABLE ]
 
[ [ [ NOT ] DEFERRABLE ]
36번째 줄: 90번째 줄:
 
[ VALIDATE | NOVALIDATE ]
 
[ VALIDATE | NOVALIDATE ]
 
[ exceptions_clause ]
 
[ exceptions_clause ]
 +
 +
</source>
 +
[[Category:oracle]]

2023년 4월 2일 (일) 23:58 기준 최신판

thumb_up 추천메뉴 바로가기


1 오라클 제약[편집]

  • Constraint = 제약조건
  • 테이블에 올바른 데이터만 입력 받고 잘못된 데이터는 들어오지 못하도록 칼럼마다 정하는 규칙

1.1 제약 종류[편집]

  1. NOT NULL -> null 값 입력 안됨
  2. UNIQUE -> 중복값 입력 안됨
  3. PRIMARY KEY -> NOT NULL + UNIQUE
  4. FOREIGN KEY -> 다른 테이블의 칼럼을 참조해 무결성 검사
  5. 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 ]