반응형
데이터베이스에서 "PK(Primary Key, 기본키)"와 "FK(Foreign Key, 외래키)"는 데이터의 무결성을 유지하고 관리하는데 필수적인 요소로 이번 글에서는 외래키에 대해서 알아보겠습니다.
외래키(Foreign Key, FK)
외래키는 한 테이블의 필드가 다른 테이블의 기본키를 참조하여 두 테이블 간의 관계를 연결하는 역할을 합니다. 이를 통해 데이터 간의 연관성을 명확하게 하며, 데이터의 무결성을 유지할 수 있습니다.
- 테이블 중에서 기본키(Primary Key) 값이 있는 테이블을 다른 테이블 간 연결을 설정할 때 사용됩니다.
- PK(Primary Key, 기본키)를 가지고 오는 테이블이 FK(Foreign Ket, 외래키)를 가지게 됩니다.
- 기본키(PK)를 가지고 있는 테이블(부모테이블)이 생성되어야, 외래키(FK)를 가지고 있는 테이블(자식테이블)을 생성할 수 있습니다.
- Foreign Key의 이름은 중복되서는 안됩니다.
외래키(Foreign Key) 생성하기
예시에서 참조할 부모테이블에 기본키를 'midx'라는 기본키(PK)를 생성했습니다.
--기본키(Primary Key, PK)를 가지고 있는 부모테이블 생성
create table member(
memberindex number not null primary key,
name varchar2(10) not null,
id varchar2(10) not null,
pw varchar2(10) not null
);
1. 테이블을 생성하면서 외래키(FK) 생성하기
create table board(
bidx number not null primary key,
title varchar2(10) not null,
content varchar2(10) not null,
delYN varchar2(10) not null,
memberindex number not null, --외래키로 지정할 컬럼
--외래키 지정문
CONSTRAINT fk_memberindex foreign key(memberindex) references member (memberindex)
--CONSTRAINT [FK명] foreign ([FK가 될 컬럼명]) reference [FK로 연결할 PK가 위치한 부모테이블] ([PK컬럼명])
);
반응형
2. 테이블 생성 후에 외래키(FK) 생성하기
ALTER TABLE board
ADD CONSTRAINT fk_memberindex foreign Key(memberindex) references member (memberindex);
--ALTER TABLE [FK를 생성시킬 테이블]
--ADD CONSTRAINT [FK명] foreign key (FK로 지정할 컬럼명) references [PK가 위치하는 부모테이블] ([PK컬럼명])
FK로 지정할 컬럼이 미리 존재하는 상태에서 가능합니다.
3. 외래키(Foreign Key, Fk) 삭제하기
ALTER TABLE board drop constraint fk_memberindexl;
--ALTER TABLE [삭제할 KF가 위치한 테이블명] drop constraint [삭제할 FK명]
외래키 확인하기
데이터베이스에서 MmeberA의 테이블의 기본키(PK)를 BoardA에서 외래키(FK)로 사용하는 것을 확인할 수 있습니다.
SQL에서 사용되는 영어 단어의 뜻을 찾아보면 기억이 잘 될 것 같아서 찾아보았습니다.
- CONSTRAINT : 제약 또는 제한, 통제를 의미합니다.
- references : 참고자료
반응형
'Web Programing > DB' 카테고리의 다른 글
Oracle Default 기본값 생성, 수정, 삭제 방법 (0) | 2024.04.02 |
---|---|
Oracle default 값 설정, 컬럼에 기본값 설정하기 SQL (0) | 2024.03.30 |
Oracle 테이블의 데이터만 삭제하는 방법, 행 삭제 (DELETE, TRUNCATE) (0) | 2024.03.25 |
Oracle DB 기본키 Primary Key(PK) 생성 추가 삭제 방법 (0) | 2024.03.25 |
Oracle / DB 테이블의 데이터만 삭제하기 행 삭제 (DELTE, TRUNCATE) (0) | 2024.03.22 |