. 참조 무결성
. 행을 입력, 수정 ,삭제할 때 연관되는
다른 테이블과의 데이터가 정확하게 유지되도록 규정하는 것이다.
. 참조 무결성은 참조 관계에 있는 두 테이블의 데이터가
항상 일관된 값을 가져야한다.
. 참조 무결성에는 FOREIGN KEY 가 있다.
. FOREIGN KEY(외래키)
. 다른 테이블의 데이터를 참조할 때 없는 값을
참조할 수 없도록 제약을 주는 것이다.
. 참조될 테이블이 먼저 만들어지고 값이 입력되어야 한다.
. 이 때, 참조될 열의 값은 참조될 테이블에서
PRIMARY KEY로 설정되어 있어야 한다.
1.
create table parent
( id number PRIMARY KEY);
2.
create table child
(name varchar2(30) not null,
id number not null,
CONSTRAINT ID_FK FOREIGN KEY(ID) REFERENCES PARENT(ID));
3.
insert into parent values(35);
4.
SQL> insert into child values('korea', 45);
insert into child values('korea', 45)
*
1행에 오류:
ORA-02291: 무결성 제약조건(SCOTT.ID_FK)이 위배되었습니다- 부모 키가 없습니다
// 35 이외의 값은 넣을 수 없다.
5.
SQL> insert into child values('korea', 35);
1 개의 행이 만들어졌습니다.
// primary 키에 없는 값을 가질 수 없다.
6.
select table_name, CONSTRAINT_NAME, CONSTRAINT_TYPE,
r_constraint_name
from USER_CONSTRAINTS
where table_name = 'CHILD';
. FOREIGN KEY 설정 방법
. 테이블 생성시 설정
CONSTRAINTS 외래키 이름 FOREIGN KEY(컬럼명)
REFERENCES 참조 테이블명(참조컬럼)
. 외래키 삭제, 해제
ALTER TABLE 테이블 이름 DROP CONSTRAINT 제약 이름;
ex) ALTER TABLE CHILD DROP CONSTRAINT ID_FK;
1.
CREATE TABLE TABLE_3(
LOGIN_ID VARCHAR2(20) CONSTRAINT KO_LONID_NN NOT NULL,
LOGIN_PWD VARCHAR2(20) CONSTRAINT KO_LGNPW_NN NOT NULL,
LOGIN_DATA VARCHAR2(20) CONSTRAINT KO_LGNDA_U UNIQUE,
TEL VARCHAR2(20)
);
2.
ALTER TABLE TABLE_3
MODIFY(TEL NOT NULL);
3.
select table_name, CONSTRAINT_NAME, CONSTRAINT_TYPE,
r_constraint_name
from USER_CONSTRAINTS
where table_name = 'TABLE_3';
4.
ALTER TABLE TABLE_3
MODIFY(TEL UNIQUE);
5.
ALTER TABLE TABLE_3
RENAME CONSTRAINT KO_LONID_NN TO SS_lonid_nn;