데이터의 무결성
테이블엔 정확한 구조의 정보만이 들어가야함
무결성을 위해서 무결성 제약조건(IC : Integrity Constraint)을 사용한다.
선언위치에 따라 무결성제약조건은
컬럼수준(테이블선언시)
어떤 제약조건도 선언가능
create table table3(
mid varchar(10) constraint table3_mid_pk primary key,
mname varchar(20)
)
create table table5(
mid varchar(10) not null,
mname varchar(10)
)
테이블수준(컬럼선언후 나중에따로)
여러 컬럼에 적용되는 제약조건 선언가능
NOT NULL 선언 불가
create table table4(
mid varchar(10),
mname varchar(20),
constraint table4_mid_pk primary key (mid)
)
create table table6(
ssn1 varchar(6),
ssn1 varchar(7),
mname varchar(10),
constraint table6_ssn1_ssn2_pk primary key (ssn1,ssn2)
)
제약조건의 이름을 안줄경우 오라클은 SYS_XXXXXXXX와 같은 구조로 이름을 만든다.
UNIQUE와 PK공통점
-> 값의 중복이 되면 안된다.자동으로 UNIQUE INDEX(속도향상)가 만들어진다.
-> 컬럼 여러개를 묶어서 복합키로 만들 수 도 있다.
차이점
-> PK는 null불가, UNIQUE는 가능
-> PK는 테이블당 하나만 가능 UNIQUE는 여러개 가능
constraint명명 규칙 => 테이블명_컬럼n_제약조건
foreign key
- FK가 있는 테이블을 child table이라 부른다.
또한 참조되는 테이블은 parent table이라 부른다.
부모와 자식테이블이 같은 경우도 있다.
PK의 삭제에 대비해 FK를 지정하며 지정하는 주요 옵션
destrict - 삭제시 삭제되지않는다.(default)
cascade - 삭제시 연쇄삭제.
set to null - 삭제시 널로 변환
create table table12(
mid varchar(10) primary key,
ssn1 varchar(6),
ssn2 varchar(7),
constraint table12_ssn1_ssn2_un unique (ssn1,ssn2)
);
create table tabl13(
mid varchar(10) references table12(mid) on delete cascade,
ssn1 varchar(6),
ssn2 varchar(7),
constraint table13_ssn1_ssn2_fk foreign key (ssn1,ssn2) references table12(ssn1,
ssn2)
);
create table table14(
mid varchar(10) primary key,
mname varchar(10)
);
insert into table14 values('fall','이가을');
create table table15(
mid varchar(10) references table14(mid) on delete cascade,
mtel varchar(50)
);
insert into table15 values('fall','011-9878-7231');
delete from table14 where mid = 'fall';
create table table16(
mid varchar(10) references table14(mid) on delete set null,
mtel varchar(50)
);
insert into table16 values ('fall', '34234234234');
delete from table14 where mid = 'fall';
Check constraint
오라클의 세가지 무결성 : 객체 무결성, 참조 무결성, 영역 무결성
어떠한 영역에 속하는 값이 들어간다.
영역 무결성 :
create table table17(
co1 number(1) constraint table17_co1_ck check (co1 in (1,2,3)),
co2 number(3) check (co2>0 and co2<10),
co3 number(1),
constraint table17_co3_ck check(co3>co1)
--이경우 반드시 테이블 수준으로 부여한다.
--컬럼 수준에선 다른 컬럼을 참조하지 못한다.
);
insert into table17 values (2,5,3);
'DB' 카테고리의 다른 글
빅데이터(BIG DATA) (0) | 2014.10.17 |
---|---|
빅데이터 3V (0) | 2014.10.17 |
mysql latin1 에서 euckr 변환 (0) | 2014.08.06 |
mssql, mysql, oracle null 값 변경하기 (0) | 2014.07.06 |
mssql not in not exists (1) | 2014.06.28 |