티스토리 뷰
<제약조건>constraint(insert,update에 적용)--update:데이터 재입력
1. not null - 반드시 데이터를 입력받겠음.
2. unique - 중복되는 데이터를 입력받지 않겠음.
입력(insert,update)되는 데이터를 기존데이터와 비교!
3. primary key
- note null과 unique를 동시에 만족하는 제약조건.
- 주로 서로 다른 레코드(행)를 구분할 목적으로 사용.
4. foreign key
- 기존 입력된 데이터를 참조해야 할 경우 사용.
- 다른 테이블에 있는 관련있는 컬럼을 참조해야 될 경우
5. check
- 특정 범위내의 데이터를 표현.
<제약조건 설정방법>
1. 컬럼레벨 설정
create table 테이블명
(
col1 자료형 CONSTRAINT 제약명 CONSTRAINT_TYPE
);
2. 테이블레벨 설정
create table 테이블명
(
col1 자료형
col2 자료형
CONSTRAINT 제약명 CONSTRAINT_TYPE (컬럼명col1)
);
3. 테이블변경
- 테이블 생성을 끝마치고 난 후 제약설정.
alter table 테이블명
ADD CONSTRAINT 제약명 CONSTRAINT_TYPE(적용컬럼명);
<null문제점>: 중복을 체크하지 못함.
<unique문제점>: null중복은 방지하지 못함
--->제약관련 데이터 딕셔너리: user_constraints(시스템테이블)
select table_name, constraint_name, constraint_type
from user_constraints;
TABLE_NAME CONSTRAINT_NAME C
------------------------------ ------------------------------ -
DEPT PK_DEPT P
EMP PK_EMP P
EMP FK_DEPTNO R
EMP02 SYS_C0011061 C
EMP02 EMP02_EMPNO_PK P
<제약 삭제하기>
형식)
ALTER TABLE 테이블명
DROP constraint 제약명;
형식)
alter table 테이블명
MODIFY 컬럼명 constraint 제약명 NOT NULL;
※만약 다른 테이블에서 참조하는 기본키라면 삭제안됨!
(참조하는 자식 foreign key를 먼저 삭제해야 함.)
1. 자식테이블 제약삭제
alter table emp02
drop constraint emp02_fk;
2. 부모테이블 제약삭제
alter table dept02
drop primary key;
※자식테이블까지 한번에 삭제
alter table dept02
drop primary key CASCADE;
테이블이 변경되었습니다.
---> 참조하는 모든 자식테이블의 제약을 찾아서 삭제후
부모테이블 제약을 삭제
<CHECK제약조건>
형식) check (조건식)
create table emp02(
empno number(4) primary key,
ename varchar2(15) default '무명',
sal number(7,2) check(sal>2000),
gender char(2) check(gender in('남','여'))
);
<복합키 설정>
alter table dept02
add constraint dept02_pk primary key (deptno,dname);