Data Base/Oracle SQL

231019 Oracle SQL FOREIGN KEY 참조키, 외래키

잇꼬 2023. 10. 19. 18:15
728x90
반응형
SMALL

# 데이터 INSERT

INSERT INTO hr.dept(dept_id, dept_name) VALUES(10, '총무부');
INSERT INTO hr.dept(dept_id, dept_name) VALUES(20, '인사팀');


# 컬럼 추가

ALTER TABLE hr.emp ADD dept_id number;

INSERT INTO hr.emp( id, name, day, dept_id) VALUES( 1, '홍길동', sysdate, 10 );
INSERT INTO hr.emp( id, name, day, dept_id) VALUES( 2, '윤건', sysdate, 30 );

여기서 문제, 

hr,dept 테이블에 DATA가 10, 20 뿐인데 INSERT 한 DATA는 10, 30 이다. 

1. FOREIGN KEY
    A. 외래키, 참조무결성 제약조건
    B. 동일한 테이블이나 다른 테이블의 PRIMARY KEY, UNIQUE 제약조건을 참조한다.
    C. 데이터의 품질
    D. 중복값 허용, NULL 값 허용. 
    E. 종속되는 행을 삭제할 수 없다.
    F. 참조를 당하는 테이블은 삭제할 수 없다.

# FOREIGN KEY 참조키 추가

ALTER TABLE hr.emp ADD CONSTRAINT emp_dept_id_fk
FOREIGN KEY(dept_id) REFERENCES hr.dept(dept_id);


# 테이블의 제약조건 확인

SELECT * FROM user_constraints WHERE table_name = 'DEPT';


# 테이블의 컬럼 제약조건 확인

SELECT * FROM user_cons_columns
WHERE table_name = 'DEPT';


# DATA INSERT

INSERT INTO hr.emp( id, name, day, dept_id) VALUES( 1, '홍길동', sysdate, 10 );


# 오류발생 : ORA-02291: integrity constraint (HR.EMP_DEPT_ID_FK) violated - parent key not found 

이유) FOREIGN KEY 없는 데이터가 입력되면 안된다.

INSERT INTO hr.emp( id, name, day, dept_id) VALUES( 2, '윤건', sysdate, 30 );


# 오류발생 : ORA-02292: integrity constraint (HR.EMP_DEPT_ID_FK) violated - child record found 

이유) FOREIGN KEY 제약 조건이 걸려 있기 때문에 참조하는 자식 데이터가 있으면 삭제가 안된다.

DELETE FROM hr.dept WHERE dept_id = 10;


# 삭제 가능 : FOREIGN KEY 제약 조건이 걸려 있더라도 참조하는 자식데이터가 없으면 삭제가능
실행창)  '1 행 이(가) 삭제되었습니다. '

DELETE FROM hr.dept WHERE dept_id = 20;

# 오류발생 : ORA-02449: unique/primary keys in table referenced by foreign keys

FOREIGN KEY 제약 조건이 걸려 있기 때문에 참조하는 자식 데이터가 있으면 테이블 삭제가 안된다.

728x90
반응형
LIST