Oracle의 제약은 주로 비즈니스 로직 수준에서 데이터 무결성을 유지하는 것입니다. 주로 프로그래머가 애플리케이션에 제약 조건을 지정하거나 데이터 무결성을 유지하기 위한 트리거를 정의하고, 마지막으로 Oracle 자체 제약 조건을 사용하여 데이터 무결성을 유지합니다. Oracle 자체 제약 조건을 사용하여 요구 사항을 충족할 수 있는 경우 Oracle 자체 제약 조건을 사용해 보십시오. 트리거와 같은 사용자 정의 제약 조건을 사용하면 데이터베이스 성능에 영향을 미치기 때문입니다. 예를 들어 트리거를 사용하면 테이블이 잠기고 테이블 스캔이나 인덱스 스캔이 수행되므로 데이터베이스 성능과 동시성이 저하됩니다.
Oracle 제약조건은 주로 다음과 같은 유형으로 구분됩니다.
null이 아님 null이 아닌 제약 조건, 고유 고유 제약 조건, 기본 키 기본 키 제약 조건, 외래 키 외래 키 제약 조건, 검사 제약 조건.
null이 아님 null이 아닌 제약 조건:
생성 방법: 1. 테이블 생성 시 컬럼 수준에서 정의(즉, 테이블 정의 시 컬럼 뒤에만 제약 조건 정의를 작성할 수 있음), 2가지 방법. 하나는 사용자 지정 제약 조건 이름을 사용하고 다른 하나는 시스템 기본 이름을 사용합니다.
일반 사본을 클립보드 인쇄로 보시겠습니까?
테이블 t 생성
(
tid number(8) 제약조건 NK_t1은 null이 아닙니다.
tname varchar2(10) null이 아님
)
테이블 t 생성
(
tid number(8) 제약조건 NK_t1은 null이 아닙니다.
tname varchar2(10) null이 아님
)
일반 사본을 클립보드 인쇄로 보시겠습니까?
SQL> user_constraints t에서 t.constraint_name, t.table_name, t.status, t.deferrable을 선택합니다.
CONSTRAINT_NAME TABLE_NAME 상태 지연 가능
------------------------------------- ------ ---
NK_T1 T 활성화됨 연기 불가능
SYS_C003735 T 활성화됨 연기 불가능
SQL>
SQL> user_constraints t에서 t.constraint_name, t.table_name, t.status, t.deferrable을 선택합니다.
CONSTRAINT_NAME TABLE_NAME 상태 지연 가능
------------------------------------- ------ ---
NK_T1 T 활성화됨 연기 불가능
SYS_C003735 T 활성화됨 연기 불가능
SQL>
2. 테이블을 생성한 후 수정하되, 테이블의 데이터가 제약 조건을 위반하지 않는지 확인하세요.
일반 사본을 클립보드 인쇄로 보시겠습니까?
SQL> 테이블 변경 t 수정 tid not null;
테이블이 변경됨
SQL> user_constraints t에서 t.constraint_name, t.table_name, t.status, t.deferrable을 선택합니다.
CONSTRAINT_NAME TABLE_NAME 상태 지연 가능
------------------------------------- ------ ---
SYS_C003736 T 활성화됨 연기 불가능
SQL>
SQL> 테이블 변경 t 수정 tid not null;
테이블이 변경됨
SQL> user_constraints t에서 t.constraint_name, t.table_name, t.status, t.deferrable을 선택합니다.
CONSTRAINT_NAME TABLE_NAME 상태 지연 가능
------------------------------------- ------ ---
SYS_C003736 T 활성화됨 연기 불가능
SQL>
제약 조건 확인
생성 방법 : 테이블 레벨과 컬럼 레벨에서 정의할 수 있다(컬럼 이후 또는 컬럼 정의 이후에 정의할 수 있다). 정의하는 방법도 2가지가 있습니다.
일반 사본을 클립보드 인쇄로 보시겠습니까?
SQL> 테이블 t 생성
2 (
3개의 tid 번호(8) ,
4 tname varchar2(10),
5 제약 CK_T1 확인((tid가 null이 아님) 및 (tid > 0))
6)
7/
테이블이 생성되었습니다.
SQL> 테이블 변경 t 추가 제약조건 CK_T2 check(tname이 null이 아님);
테이블이 변경됨
SQL> user_constraints t에서 t.constraint_name, t.table_name, t.status, t.deferrable을 선택합니다.
CONSTRAINT_NAME TABLE_NAME 상태 지연 가능
------------------------------------- ------ ---
CK_T1 T 활성화됨 연기 불가능
CK_T2 T 활성화됨 연기 불가능
SQL>
SQL> 테이블 t 생성
2 (
3개의 tid 번호(8) ,
4 tname varchar2(10),
5 제약 CK_T1 확인((tid가 null이 아님) 및 (tid > 0))
6)
7/
테이블이 생성되었습니다.
SQL> 테이블 변경 t 추가 제약조건 CK_T2 check(tname이 null이 아님);
테이블이 변경됨
SQL> user_constraints t에서 t.constraint_name, t.table_name, t.status, t.deferrable을 선택합니다.
CONSTRAINT_NAME TABLE_NAME 상태 지연 가능
------------------------------------- ------ ---
CK_T1 T 활성화됨 연기 불가능
CK_T2 T 활성화됨 연기 불가능
SQL>
제약 조건 CK_T1은 tid 열이 비어 있을 수 없고 0보다 큰지 확인하고, CK_T2는 iname이 비어 있을 수 없도록 보장합니다. 검사 제약 조건은 동일한 행의 서로 다른 열 사이의 규칙일 수도 있습니다.
고유 제약조건
생성 방법: 고유 열에 하나의 열만 포함되어 있으면 열 수준에서 정의할 수 있습니다. 고유 열에 여러 열이 포함되어 있으면 테이블 수준에서만 정의할 수 있습니다.
일반 사본을 클립보드 인쇄로 보시겠습니까?
SQL> 테이블 t2 생성
2 (
3개의 비디오 번호 제약 VK_T1 고유,
4 vname varchar2(10),
5 vsex varchar2(10),
6 제약 조건 VK_T2 고유(vname,vsex)
7)
8/
테이블이 생성되었습니다.
SQL> user_constraints t에서 t.constraint_name, t.table_name, t.status, t.validated, t.deferrable을 선택합니다.
CONSTRAINT_NAME TABLE_NAME 상태 검증됨 연기 가능
--------------- ---------- -------- ---------- ------- -------
VK_T1 T2 활성화됨 검증됨 연기 불가
VK_T2 T2 활성화됨 검증됨 연기 불가
SQL>
SQL> 테이블 t2 생성
2 (
3개의 비디오 번호 제약 VK_T1 고유,
4 vname varchar2(10),
5 vsex varchar2(10),
6 제약 조건 VK_T2 고유(vname,vsex)
7)
8/
테이블이 생성되었습니다.
SQL> user_constraints t에서 t.constraint_name, t.table_name, t.status, t.validated, t.deferrable을 선택합니다.
CONSTRAINT_NAME TABLE_NAME 상태 검증됨 연기 가능
--------------- ---------- -------- ---------- ------- -------
VK_T1 T2 활성화됨 검증됨 연기 불가
VK_T2 T2 활성화됨 검증됨 연기 불가
SQL>
UNIQUE 제약조건이 생성되면 인덱스가 생성된다. (Unique Index일 수도 있고 Non-Unique Index일 수도 있으며, 테이블 생성 시 테이블 지정 여부에 따라 Non-Unique Index가 될 수도 있다. 데이터가 삽입됨):
일반 사본을 클립보드 인쇄로 보시겠습니까?
SQL> user_indexes t에서 t.index_name, t.table_name, t.uniqueness를 선택합니다.
INDEX_NAME TABLE_NAME 고유성
---------- ---------- ----------
VK_T1 T2 고유
VK_T2 T2 고유
SQL> user_indexes t에서 t.index_name, t.table_name, t.uniqueness를 선택합니다.
INDEX_NAME TABLE_NAME 고유성
---------- ---------- ----------
VK_T1 T2 고유
VK_T2 T2 고유
인덱스가 있으므로 테이블을 생성할 때 인덱스 저장 위치와 일부 저장 매개변수를 지정할 수 있습니다.
일반 사본을 클립보드 인쇄로 보시겠습니까?
SQL> 테이블 t2 생성
2 (
3개의 비디오 번호 제약 VK_T1 고유,
4 vname varchar2(10),
5 vsex varchar2(10),
6 제약 조건 VK_T2 고유(vname,vsex) 인덱스 테이블스페이스 indx 사용
7개 저장(초기 100k, 다음 100k pctincrease 0)
8 노로깅
9)
10/
테이블이 생성되었습니다.
SQL> 테이블 t2 생성
2 (
3개의 비디오 번호 제약 VK_T1 고유,
4 vname varchar2(10),
5 vsex varchar2(10),
6 제약 조건 VK_T2 고유(vname,vsex) 인덱스 테이블스페이스 indx 사용
7개 저장(초기 100k, 다음 100k pctincrease 0)
8 노로깅
9)
10/
테이블이 생성되었습니다.
Constrained Index가 저장되는 테이블스페이스는 indx 테이블스페이스이고, 초기 블록 크기는 100k이며, dml 작업에 대해서는 로그가 생성되지 않는다(단, 다른 이유로도 로그가 생성되지만 기본 로깅에 비해 로그가 적다).
기본 키 기본 키 제약 조건
생성방법 : 기본키는 주로 non-null과 유일성으로 구성된다. 테이블에는 기본 키가 하나만 포함될 수 있지만 기본 키에는 여러 열이 포함될 수 있습니다.
일반 사본을 클립보드 인쇄로 보시겠습니까?
SQL> 테이블 t2 생성
2 (
3개의 비디오 번호 제약 VK_T1 고유,
4 vname varchar2(10),
5 vsex varchar2(10),
6 인덱스 테이블스페이스 indx를 사용하는 VK_T2 기본 키(vname,vsex) 제약 조건
7개 저장(초기 100k, 다음 100k pctincrease 0)
8 노로깅
9)
10/
테이블이 생성되었습니다.
SQL> 테이블 t2 생성
2 (
3개의 비디오 번호 제약 VK_T1 고유,
4 vname varchar2(10),
5 vsex varchar2(10),
6 인덱스 테이블스페이스 indx를 사용하는 VK_T2 기본 키(vname,vsex) 제약 조건
7개 저장(초기 100k, 다음 100k pctincrease 0)
8 노로깅
9)
10/
테이블이 생성되었습니다.
외래 키 외래 키
생성 방법: 외래 키에 포함된 테이블은 두 개 또는 하나의 테이블을 가질 수 있습니다. 두 개의 테이블의 경우 하위 테이블의 필드가 참조하는 키는 더 큰 테이블의 기본 키여야 합니다. 제약 조건은 하위 테이블에 설정되어 테이블의 필드 값이 상위 테이블에 있거나 NULL 값이어야 함을 나타냅니다.
일반 사본을 클립보드 인쇄로 보시겠습니까?
SQL> 테이블 부서 생성
2 (
3은 숫자(8)을 수행했고,
4 dname varchar2(20),
5 제약 PK_DEPT 기본 키(했었습니다)
6)
7/
테이블이 생성되었습니다.
SQL>
SQL> emp 테이블 생성
2 (
3 eid 번호(8) 기본 키,
4 이름 varchar2(20),
5 did number(8) /*참조 부서(did)*/,
6 dname varchar2(20),
7 제약조건 FK_EMP2 외래 키(did)는 부서(did)를 참조합니다.
8)
9/
테이블이 생성되었습니다.
SQL> 테이블 부서 생성
2 (
3은 숫자(8)을 수행했고,
4 dname varchar2(20),
5 제약 PK_DEPT 기본 키(했었습니다)
6)
7/
테이블이 생성되었습니다.
SQL>
SQL> emp 테이블 생성
2 (
3 eid 번호(8) 기본 키,
4 이름 varchar2(20),
5 did number(8) /*참조 부서(did)*/,
6 dname varchar2(20),
7 제약조건 FK_EMP2 외래 키(did)는 부서(did)를 참조합니다.
8)
9/
테이블이 생성되었습니다.
외래 키(foreign key)는 참조 키(reference key)에 의해 결정되므로, fater 테이블에 대한 업데이트, 삭제, 삭제 및 기타 작업을 수행할 때 제한이 발생합니다. 구체적으로는 외래 키 제약 조건의 상태에 따라 결정됩니다.
작업 시 삭제, 계단식 삭제, null 세트 삭제
조치 시 삭제가 기본 설정입니다. fater 테이블의 데이터를 삭제하면 Oracle은 단어 테이블을 잠근 다음 테이블을 스캔하고(외래 키 열이 있는 경우 인덱스를 스캔) 데이터가 존재하지 않게 됩니다. 하위 테이블의 외래 키 열 삭제가 허용됩니다.
delete cascade는 단어 테이블에서 해당 행도 삭제합니다.
delete set null이면 바 테이블의 외래 키 열에 해당하는 데이터가 NULL이 됩니다.
일반 사본을 클립보드 인쇄로 보시겠습니까?
테이블 EMP 생성
(
eid 번호(8) 기본 키,
이름 varchar2(20),
did number(8) /*참조 부서(did)*/,
dname varchar2(20),
제약 조건 FK_EMP2 외래 키(did)는 삭제 세트 null에서 dept(did)를 참조합니다.
)
테이블 EMP 생성
(
eid 번호(8) 기본 키,
이름 varchar2(20),
did number(8) /*참조 부서(did)*/,
dname varchar2(20),
제약 조건 FK_EMP2 외래 키(did)는 삭제 세트 null에서 dept(did)를 참조합니다.
)