기록하는 중/데이터베이스
[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로 설정 됨. |