[sql] 제약조건
*(테이블에 저장되는)데이터에 대해서 "무결성"을 유지하기 위해 존재한다.
*무결성 : 데이터의 정확성, 일관성을 유지한다.
*종류로는 NOT NULL, UNIQUE, CHECK,기본키, 외래키 등이 있다.
UNIQUE
*기존의 데이터와 같은 데이터가 삽입되는 것을 허락하지 않는 조건입니다.*UNIQUE조건을 설정하는 방법은 두가지가 존재합니다.
1. 테이블을 생성할 때 생성
CREATE TABE t_1(
COL_1 VARCHAR2(10); --조건 없음
COL_2 VARCHAR2(10) NOT NULL; --NULL을 허용하지 않음
COL_3 VARCHAR2(10) UNIQUE; --중복데이터 허용하지 않음 NULL 비교 대상에서 제외된다
COL_4 VARCHAR2(10) UNIQUE NOT NULL; --중복데이터, NULL을 허용하지 않음
);
2. CONSTRAINTS
*CONSTRAINTS키워드를 이용하여 (기존 만들어 놓은 테이블의)컬럼에 제약조건을 추가할 수 있다.*CONSTRAINTS라는게 사전적으로 "제약"의 뜻을 가지고 있다
기본키( PK : Primary key )
*PK는 UNIUQE + NOT NULL 조건을 합친 것 이다.
*테이블 당 하나의 컬럼만 지정할 수 있다.
CREATE TABLE t_1(
COL_1 VARCHAR2(10) PRIMARY KEY; --유일하면서, NULL을 허용하지 않는다.
COL_2 VARCHAR2(10);
);
INSERT INTO t_1 VALUSE( 'aaa', 'bbb' ); --기존 데이터
INSERT INTO t_1 VALUSE( 'aaa', 'bbb' ); --에러 : 이미 'aaa'데이터가 존재한다.
INSERT INTO t_1 VALUSE( '', 'bbb' ); --에러 : NULL입력을 허용하지 않는다.
외래키( FK : foregin key )
*외래키를 생성해 놓으면 부서정보에 없는 부서번호를입력할 때 오라클은 오류를 발생시켜 잘못된 데이터가 입력되는 것을 방지한다.
참조 무결성을 보장하는 것이다
*삭제도 마찬가지다. 사원 테이블에서 사용하고 있는 부서 정보를 부서 테이블에서 삭제하면 무결성이 깨진다. 하지만 외래키를 생성해 놓으면 부서 테이블에서 해당 부서정보를 삭제할 때 오류가 발생해 데이터 삭제를 막아 참조 무결성이 보장된다.
*부서 테이블에서 부서번호를 변경하는 것 역시 해당 부서가 참조되고 있다면 수정할 수 없다.
*외래키에 대한 제약사항은 다음과 같다.
1 반드시 참조하는 테이블이 먼저 생성되어야 하며, 참조키가 참조 테이블의 PRIMARY KEY(혹은 UNIQUE)로 만들어져 있어야 한다.
2 외래키에 사용할 수 있는 컬럼 개수는 최대 32개다.
3 여러 컬럼을 외래키로 만들려면, 참조하는 컬럼과 외래키 컬럼의 순서와 개수는 같아야 한다.
*외래키를 만저 생상한 뒤 개발을 하지 않는다.
시스템이 어느정도 테스트가 완료되고 안정될 때 생성한다.
COL_2 VARCHAR2(10),
ON DELETE, ON UPDATE
수정하면, 참조하는 테이블에서도 삭제와 수정이 같이 이루어집니다.
2. RESTRICT : 참조하는 테이블에 데이터가 남아 있으면,
--RESTRICT : 제한하다.
4. NO ACTION : 참조되는 테이블에서 데이터를 삭제하거나 수정해도, 참조하는 테이블의 데이터는 변경되지 않습니다.
5. SET DEFAULT : 참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블의 데이터는 필드의 기본값으로 설정됩니다.
CREATE TABLE category(
FORIEGN KEY( COL_3 ) REPERENCE category ( 이름 ) CASCADE ON DELETE, CASCADE ON UPDATE, RESTRICT
--t_1테이블의 COL_3이 남아있다면 category의 "이름"을 삭제할 수 없습니다.
댓글
댓글 쓰기