MySQL/MariaDB의 제약조건: PRIMARY KEY와 FOREIGN KEY
참조 키의 이해
PRIMARY KEY와 FOREIGN KEY의 관계
- 참조되는 키(PRIMARY KEY): 테이블의 각 행을 고유하게 식별하며, 다른 테이블의 외래 키가 참조할 수 있습니다.
- 참조하는 키(FOREIGN KEY): 다른 테이블의 PRIMARY KEY를 참조하여 테이블 간의 관계를 나타내고, 참조 무결성을 보장합니다.
PRIMARY KEY (기본 키)
특징과 역할
- 테이블의 각 행을 고유하게 식별하는 열
- 중복값과 NULL 값을 허용하지 않음
- 테이블당 하나의 PRIMARY KEY만 설정 가능
- 다른 테이블이 참조할 수 있는 기준 열로 사용
예시 코드
CREATE TABLE dept_p (
deptno INT(2) PRIMARY KEY,
dname VARCHAR(14),
loc VARCHAR(13)
);
부모 테이블(Parent Table)의 의미
- 다른 테이블이 참조하는 테이블
- PRIMARY KEY나 UNIQUE 제약조건으로 고유 식별자 역할을 하는 열을 포함
FOREIGN KEY (외래 키)
특징과 역할
- 다른 테이블의 PRIMARY KEY를 참조하는 열
- 테이블 간의 관계를 표현
- 참조하는 테이블의 PRIMARY KEY에 존재하는 값만 사용 가능
- 참조 무결성 유지
예시 코드
CREATE TABLE emp_f (
empno INT(4),
ename VARCHAR(10),
job VARCHAR(9),
deptno INT(2),
CONSTRAINT FOREIGN KEY (deptno) REFERENCES dept_p (deptno)
);
자식 테이블(Child Table)의 의미
- 부모 테이블의 PRIMARY KEY를 참조하는 테이블
- FOREIGN KEY 제약조건을 통해 부모 테이블의 값만 사용 가능
참조 제약조건과 데이터 무결성
참조 무결성(Referential Integrity)
- 부모 테이블에 없는 값은 자식 테이블에서 사용 불가
- 자식 테이블이 참조 중인 부모 데이터는 수정/삭제 불가
주요 제약사항
- 존재하지 않는 부모 값 참조 방지
- 부모 데이터 삭제 제한
- 부모 데이터 수정 제한
실제 동작 예시
1. 존재하지 않는 부모 키로 데이터 삽입
INSERT INTO emp_f VALUES (1000, '홍길동', 'clerk', 10);
2. 올바른 참조 관계 설정
INSERT INTO dept_p VALUES (10, '영업부', '부여');
INSERT INTO emp_f VALUES (1000, '홍길동', 'clerk', 10);
3. 참조되는 데이터 수정 시도
UPDATE dept_p SET deptno = 20 WHERE deptno = 10;
4. 참조되는 데이터 삭제 시도
DELETE FROM dept_p WHERE deptno = 10;
결론
PRIMARY KEY와 FOREIGN KEY는 데이터베이스의 무결성과 일관성을 유지하는 중요한 제약조건입니다. 이를 통해 데이터의 정확성을 보장하고 관계형 데이터베이스의 특징을 제대로 활용할 수 있습니다.