기록하는 중/데이터베이스

[Oracle] 무결성 제약조건

성장하는 요롱이 2023. 12. 17. 23:28
 무결성 제약 조건
  • 데이터 무결성 - 데이터베이스 내의 데이터에 대한 정확성, 일관성, 유효성, 신뢰성을 보장하기 위해 데이터 변경 혹은 수정 시 여러가지 제한을 두어 데이터의 정확성을 보증하는 것을 말함
  • 제약 조건 - 바람직하지 않은 데이터가 저장되는 것을 방지하기 위해 테이블을 생성할 때 각 컬럼에 대해서 정의하는 여러 가지 규칙
무결성 제약 조건 설명
NOT NULL NULL을 허용하지 않음
UNIQUE 중복된 값을 허용하지 않음. 항상 유일한 값을 갖도록 함
PRIMARY KEY NULL을 허용하지 않고 중복된 값을 허용하지 않음
NOT NULL 조건과 UNIQUE 조건을 결합한 형태
FOREIGN KEY 참조되는 테이블의 칼럼의 이 존재하면 허용
참조되는 테이블(부모테이블)과 참조되는 테이블(자식테이블)간의 참조 무결성이란 개념을 포함한 외래 키 제약조건 명시.
CHECK 저장 가능한 데이터 값의 범위나 조건을 지정하여 설정한 값만을 허용

※ UNIQUE와 NULL 의 관계 - UNIQUE는 NULL 값을 예외로 간주. 만약 NULL 값마저도 입력되지 않게 제한하려면 테이블 생성지 NOT NULL UNIQUE 두 가지 제약 조건을 기술 하면 됨

 사용 예시
CREATE TABLE EMP1(
	EMPNO NUMBER(10) UNIQUE,  -- 중복을 허용하지 않음
    ENAME VARCHAR2(20) NOT NULL, -- NULL을 허용하지 않음
    JOB VARCHAR2(9),
    DEPTNO NUMBER(5)
)

CREATE TABLE EMP2(
	EMPNO NUMBER(10) PRIMARY KEY,  -- NOT NULL과 UNIQUE가 결합한 형태
    ENAME VARCHAR2(20) NOT NULL, 
    JOB VARCHAR2(9),
    DEPTNO NUMBER(5),
    GENDER VARCHAR2(1) CHECK(GENDER IN('M', 'F'))
)

 

  제약 조건명 지정하기
  • 의미 있게 제약 조건명을 명시 - 어떤 제약 조건을 위배했는지 알 수 있음
  • column_name data_type CONSTRAINT constraint_name constraint_type
  • 제약 조건 명명 규칙 : [테이블명]_[칼럼명]_[제약 조건 유형] 
-- 컬럼 레벨로 제약조건을 지정하는 방식
CREATE TABLE EMP3(
	EMPNO NUMBER(5) CONSTRAINT EMP3_EMPNO_PK PRIMARY KEY,
    ENAME VARCAHR2(20) CONSTRAINT EMP3_ENAME_NN NOT NULL,
    JOB VARCHAR2(20) CONSTRAINT EMP3_JOB_UK UNIQUE,
    DEPTNO NUMBER(5) CONSTRAINT EMP3_DEPTNO_FK REFERENCES EMP1(DEPTNO) -- EMP1 외래 키 설정
)

 

  테이블 레벨 방식으로 제약 조건 지정
  • 복합키로 기본키를 지정하는 경우 : 테이블 레벨 방식으로 사용(컬럼 레벨 형식 불가능)
-- 테이블 레벨 정의 방식의 기본 형식
CREATE TABLE table_name(
	column_name1 datatype1,
    column_name2 datatype2,
    ...
    [CONSTRAINT constraint_name] constraint_type(column_name)
)

-- 예시
CREATE TABLE EMP4(
	EMPNO NUMBER(5),
    ENAME VARCHAR2(20) NOT NULL,
    JOB VARCHAR2(10),
    DEPTNO NUMBER(5),
    PRIMARY KEY(EMPNO),
    UNIQUE(JOB),
    FORIGN KEY(DEPTNO) REFERENCES EMP1(DEPTNO)
)

 

  제약 조건 변경
ALTER TABLE table_name
ADD [CONSTRAINT constraint_name] constraint_type(column_name);

ALTER TABLE EMP3
ADD CONSTRAINT EMP03_DEPTNO_FK FOREIGN KEY(DEPTNO) REFERENCES EMP1(DEPTNO);

 

  제약 조건 제거
ALTER TABLE table_name
DROP [CONSTRAINT constraint_name];

ALTER TABLE table_name
DROP CONSTRAINT EMP2_EMPNO_PK;

 

  외래키가 설정된 데이터 삭제
  • 참조 무결성 때문에 자식 테이블의 제약 조건을 제거 한 후 부모 테이블 삭제
  • ON DELETE CASCADE와 ON DELETE SET NULL 옵션으로 삭제 가능
ON DELETE CASCADE 부모 테이블의 데이터를 삭제하면 자식 테이블의 데이터도 함께 삭제 됨.
ON DELETE SET NULL 부모 테이블의 데이터를 삭제하면 자식 테이블의 데이터는 NULL로 설정 됨.