MySQL/MariaDB의 제약조건: PRIMARY KEY와 FOREIGN KEY

유방현·2024년 11월 7일
0

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. 존재하지 않는 부모 값 참조 방지
  2. 부모 데이터 삭제 제한
  3. 부모 데이터 수정 제한

실제 동작 예시

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는 데이터베이스의 무결성과 일관성을 유지하는 중요한 제약조건입니다. 이를 통해 데이터의 정확성을 보장하고 관계형 데이터베이스의 특징을 제대로 활용할 수 있습니다.

profile
코딩하는 직장인

0개의 댓글