반응형
1. 참조키 인덱스
- 만약 부모테이블에 데이터가 1억건 있고 자식 테이블에 데이터를 1건 입력하려면 부모테이블에 1억건의 데이터를 전부를
검색합니다.
- 부모 테이블 컬럼과 자식 테이블 컬럼 양쪽에 적절한 인덱스가 생성되어 있어야 참조키 제약 조건의 성능이 좋아집니다.
2. 제약 조건 생성
CREATE TABLE EMP3
(
NO NUMBER(4) CONSTRAINT EMP3_NO_PK PRIMARY KEY,
NAME VARCHAR2(10) CONSTRAINT EMP3_NAME_NN NOT NULL,
JUMIN VARCHAR2(13) CONSTRAINT EMP3_JUMIN_NN NOT NULL CONSTRAINT EMP3_JUMIN_UK UNIQUE,
AREA NUMBER(1) CONSTRAINT EMP3_AREA_CK CHECK(AREA < 5),
DEPTNO VARCHAR2(6) CONSTRAINT EMP3_DEPTNO_FK REFERENCES DEPT2(DCODE)
);
- 위와 같은 테이블 생성 쿼리, 위 쿼리처럼 제약 조건의 이름을 직접 지정하는 것을 권장합니다.
CREATE TABLE EMP4
(
NO NUMBER(4) PRIMARY KEY,
NAME VARCHAR2(10) NOT NULL,
JUMIN VARCHAR2(13) NOT NULL UNIQUE,
AREA NUMBER(1) CHECK(AREA < 5),
DEPTNO VARCHAR2(6) REFERENCES DEPT2(DCODE)
)
3. UNIQUE 제약 조건 추가하기
ALTER TABLE EMP4 ADD CONSTRAINT EMP4_NAME_UK UNIQUE(NAME);
4. NOT NULL 제약 조건 추가하기
- ADD가 아닌 MODIFY 키워드를 사용해야 합니다.
ALTER TABLE EMP4 MODIFY(AREA CONSTRAINT EMP4_AREA_NN NOT NULL);
5. 참조키 제약 조건 추가하기
- 부모 테이블에 설정된 컬럼이 PRIMARY KEY이거나 UNIQUE KEY 설정이 되어 있어야 합니다.
ALTER TABLE EMP4 ADD CONSTRAINT EMP4_NO_FK FOREIGN KEY(NO) REFERENCES EMP2(EMPNO);
6. FOREIGN KEY 생성 옵션
- ON DELETE CASECADE : 부모 테이블의 데이터가 지워지면 자식 테이블의 데이터도 함께 지워집니다.
- ON DELETE SET NULL : 부모테이블의 데이터가 지워질 경우 자식 테이블의 값을 NULL로 설정합니다.
7. 제약 조건 DISABLE 하기
- 이미 검증된 대량의 데이터를 테이블에 입력할 경우에는 제약 조건을 잠시 DISABLE하고 데이터 입력 후 ENABLE로 변경하는게 속도가 빠릅니다.
- 아래 입력 값 중 SYS_C0011218 은 제약 조건 명으로 INSERT 수행시 무결성 제약 조건 위배 알림에 표시되어있습니다.
ALTER TABLE TEST_NOVALIDATE DISABLE NOVALIDATE CONSTRAINT SYS_C0011218;
8. 제약 조건 ENABLE 하기
ALTER TABLE TEST_ENABLE ENABLE NOVALIDATE CONSTRAINT TE_NAME_NN;
9. 제약조건 DISABLE VALIDATE 하기
- 테이블 내용을 변경할 수 없도록 합니다.
ALTER TABLE TEST_VALIDATE DISABLE VALIDATE CONSTRAINT TV_NAME_NN;
10. 제약 조건 ENABLE VALIDATE 하기
ALTER TABLE TEST_ENABLE ENABLE VALIDATE CONSTRAINT TE_NAME_NN;
11. 제약 조건 DISABLE 유의 사항
- PRIMARY KEY나 UINIQUE 제약조건을 DISABLE할 경우 생성되어 있던 UNIQUE INDEX가 자동으로 삭제된다는 점을 기억해야 합니다.
12. 제약 조건 삭제
ALTER TABLE EMP4 DROP CONSTRAINT EMP4_NAME_FK;
반응형
'면접 - 데이터베이스' 카테고리의 다른 글
개발자 면접 질문 - 저장 프로시저(Stored Procedure) (0) | 2020.12.04 |
---|---|
개발자 면접 질문 - MaxActive보다 MaxIdle이 적을 경우 (0) | 2020.12.04 |
DB virtual table (데이터베이스 가상 테이블) (0) | 2020.07.31 |
DB View (데이터베이스 뷰) (0) | 2020.07.31 |
DB index(데이터베이스 인덱스) (0) | 2020.07.31 |