본문 바로가기

Study/OracleDB

33강 오라클 데이터 무결성을 위한 제약 조건

728x90

-- 1. 무결성 제약 조건(Data Integrity Constraint Rule)의 개념과 종류
-- 부적절한 자료가 입력되는 것을 방지하기 위해서 테이블을 생성할 때 각 컬럼에 대해서 정의하는 여러가지 규칙
-- NOT NULL
-- NULL을 허용하지 않는다.

-- UNIQUE
-- 중복된 값을 허용하지 않는다. 항상 유일한 값을 갖도록 한다.

-- PRIMARY KEY
-- NULL을 허용하지 않고 중복된 값을 허용하지 않는다.
-- NOT NULL 조건과 UNIQUE 조건을 결합한 형태이다.

-- FOREIGN KEY
-- 참조되는 테이블의 칼럼의 값이 존재하면 허용한다.

-- CHECK
-- 저장 가능한 데이터 값의 범위나 조건을 지정하여 설정한 값만을 허용한다.

-- 2. 제약 조건 확인하기
-- 10이라는 값을 입력했는데 10이라는 값이 기본키로 존재할 때 에러남.
desc dept;
desc user_constraints; -- 내가 만든(USER) 제약 조건(CONSTRAINTS)의 정보를 조회한다.

-- OWNER는 제약 조건을 소유한 사용자명을 저장하는 컬럼
-- CONSTRAINT_NAME 은 제약 조건 명
-- CONSTRAINT_TYPE는 제약 조건 유형을 저장하는 컬럼, P, R, U, C  4가지 값 중에 하나를 갖는다.
-- FOREING KEY 만은 R로 표현됩니다.

-- 테이블에 어떤 제약 조건들이 사용되었는지 살펴보기 위해 데이터
-- 딕셔너리 USER_CONSTRAINTS의 내용을 출력해봅시다.
select constraint_name, constraint_type, table_name
from user_constraints;

select * from user_cons_columns; -- 제약조건이 지정된 컬럼명도 보여줌.

-- 3. 필수 입력을 위한 NOT NULL 제약 조건
-- 사원 번호와 사원명이 불 분명하여 데이터가 저장되지 않았다면 식별 불가능
-- 따라서 NOT NULL 제약조건을 걸어 NULL 값이 저장되지 못하도록 설정한다.
CREATE TABLE EMP02(
EMPNO NUMBER(4) NOT NULL
);

-- 4. 유일한 값만 허용하는 UNIQUE 제약 조건
-- 특정 컬럼에 대해 자료가 중복되지 않게 하는 것
-- 지정된 칼럼에는 유일하나 값이 수록되게 하는 것
CREATE TABLE EMP03(
EMPNO NUMBER(4) unique
);

-- 5. 컬럼 레벨로 제약 조건명을 명시해서 제약 조건 설정하기
-- 지금까지는 사용자가 제약 조건명을 지정하지 않고 제약 조건만을 명시하였다.
-- 이런 경우 오라클 서버가 자동으로 제약 조건명을 부여한다.
-- 오라클이 부여하는 제약조건명은 SYS_다음에 숫자를 나열한다.
insert into emp (empno)
values ('10');
-- ORA-00001: 무결성 제약 조건(SCOTT.EMP_PK)에 위배됩니다.

-- 제약 조건명을 지정하는 방법

-- 컬럼 레벨로 제약조건 명 명시하기 USER_CONSTRAINTS 

-- 6. 데이터 구분을 위한 PRIMARY KEY 제약 조건
-- 유일키 제약 조건을 지정한 칼럼은 중복된 데이터를 저장하지는 못하지만 
-- NULL 값을 저장하는 것은 허용한다.

-- 식별 기능을 갖는 컬럼은 유일하면서도 NULL 값을 허용하지 말아야 합니다.
CREATE TABLE EMP10(
EMPNO NUMBER(4) primary key
);

-- 7. 참조 무결성을 위한 FOREIGN KEY 제약 조건
CREATE TABLE EMP11(
DEPTNO NUMBER(2) REFERENCES DEPT(DEPTNO)
);

-- 8. CHECK 제약 조건
-- 입력되는 값을 체크하여 설정된 값 이외의 값이 들어오면
-- 오류 메세지와 함께 명령이 수행되지 못하게 하는 것입니다.
-- M, F 둘중 하나만 저장할 수 있도록 CHECK 제약 조건 지정하기.
CREATE TABLE EMP12(
GENDER VARCHAR2(1) CHECK(GENDER IN('M','F'))
);

-- 9. DEFAULT 제약조건
-- 아무런 값을 입력 하지 않았을 때 디폴트제약의 값이 입력이 된다.

-- 10. 테이블 레벨 방식으로 제약 조건 지정하기

-- 11. 제약 조건 변경하기

-- 12. 제약 조건의 비활성화와 CASCADE

반응형