Constraint
- 테이블 내 컬럼에 대한 규칙을 지정하는 것
: 기본키 지정, 외래키 지정, not null 지정, Unique 지정
- 제약조건의 종류
: not null (null 값 입력 불가)
: unique (중복된 값 입력 불가)
: primary key (null 값과 중복된 값 입력 불가<유일성>, 테이블당 1개만 생성가능)
: foreign key (다른 테이블의 컬럼을 참조)
: check (설정된 값만 입력을 허용)
테이블을 생성하면서 제약조건 설정
- create table 테이블명 (컬럼1 자료형(길이) constraint 제약조건이름 제약조건);
- 예시
: create table comeve (id varchar2(10) constraint com_id_pk primary_key,
name varchar2(10) constraint com_name_nn not null,
nickname varchar(15) constraint com_nik_nn not null constraint com_nik_uk unique,
age number(3) constraint com_age_ck check (age < 100),
code varchar2(5) constraint com_cod_fk refferences comjeongca(code));
=> 외래키(fk)의 경우 refferences 원테이블(컬럼)이 필수이며
여기서 원테이블의 컬럼은 unique여야 함
=> constraint 제약조건이름 은 선택사항이므로 작성하지 않아도 됌
테이블에 제약조건 추가
- alter table 테이블명 add constraint 제약조건명 제약조건(컬럼);
: 제약조건을 적용할 컬럼에 제약조건 추가
제약조건 수정
- alter table 테이블명 modify (컬렴 constraint 제약조건명 제약조건);
테이블 연쇄삭제 설정 (부모테이블 삭제시 자식테이블까지 삭제)
- alter table 테이블명 add constraint 제약조건명 foreign key(컬럼)
reffrences 원테이블(컬럼) on delete casacade;
: 여기서 on delete casacade 대신 on delete set null을 작성하면
부모테이블이 삭제되면 자식테이블의 데이터는 null이 됌
제약조건 비활성화 / 활성화
- 제약조건 비활성화
: alter table 테이블명 disable novalidate constraint 제약조건명;
= novalidate는 생략가능 (기본값이기 때문)
= validate (데이터 변경이 불가한 비활성화 / read only 상태)
= novalidate (모든 데이터 수정이 가능한 비활성화)
- 제약조건 활성화
: alter table 테이블명 enable constraint 제약조건명;
= 마찬가지로 novalidate, validate 옵션 존재
제약조건 조회
- select constraint_name, constraint_type, status from user_constraints
where table_name='테이블명(대문자)';
제약조건 삭제
- alter table 테이블명 drop constraint 제약조건명
'Database > MySQL' 카테고리의 다른 글
SQL 프로시저와 패키지에 대한 간단 정리 (0) | 2022.04.28 |
---|---|
SQL - INDEX (인덱스) (0) | 2020.12.15 |
SQL - DML (Data Manipulation Language) (0) | 2020.12.15 |
SQL - DDL(Data Definition Language)와 Dictionary (0) | 2020.12.15 |
SQL- DDL과 DML, DCL에 대한 기초 (0) | 2020.12.15 |