기본 키와 외래 키의 정의
기본 키(Primary Key)는 테이블에서 각 레코드를 고유하게 식별하는 후보 키입니다. 한 테이블에는 하나의 기본 키만 존재할 수 있습니다. 예를 들어, 사용자 정보를 저장하는 테이블에서 사용자 고유 번호(userNumber)는 해당 사용자를 유일하게 구분할 수 있는 식별자가 되므로 기본 키로 적합합니다.
기본 키는 단일 필드로 구성되거나 여러 필드의 조합으로 구성될 수 있습니다. 후자의 경우 복합 기본 키(Composite Primary Key)라고 합니다.
#categoryId와 productCode 필드를 조합하여 products 테이블의 복합 기본 키 생성
CREATE TABLE products
(
categoryId INT,
productCode VARCHAR(20),
productName VARCHAR(100),
price DECIMAL(10,2),
PRIMARY KEY(categoryId, productCode)
)외래 키(Foreign Key)는 다른 테이블과의 관계를 맺는 데 사용되는 키입니다. 참조되는 테이블의 기본 키를 가리키며, 데이터의 일관성과 무결성을 보장하는 역할을 합니다.
#orders 테이블의 userId 필드가 users 테이블의 기본 키를 참조
CREATE TABLE orders
(
orderId INT PRIMARY KEY,
userId INT,
orderDate DATE,
totalAmount DECIMAL(10,2),
FOREIGN KEY(userId) REFERENCES users(userId)
)기본 키와 외래 키의 의미와 역할
외래 키는 다른 테이블의 기본 키를 참조하는 구조입니다. 외래 키의 핵심 역할은 데이터의 일관성과 무결성을 유지하는 것입니다.
데이터 무결성 보장 원리
아래 예제를 살펴보겠습니다.
테이블 users:
| userId | userName |
|---|---|
| 101 | 김철수 |
| 102 | 이영희 |
테이블 orders:
| orderId | userId | productName |
|---|---|---|
| 1 | 101 | 노트북 |
| 2 | 101 | 마우스 |
| 3 | 102 | 키보드 |
위 예제에서 orders 테이블의 userId 필드는 users 테이블의 기본 키를 참조하는 외래 키입니다. 사용자가 주문을 넣으려면 반드시 users 테이블에 존재하는 유효한 userId를 사용해야 합니다. 존재하지 않는 사용자의 주문을 생성하거나, 참조되고 있는 사용자의 정보를 무작정 삭제하는 것은 불가능합니다. 이처럼 외래 키는 데이터의 논리적 연결을 보장하고 잘못된 데이터의混入을 방지합니다.
데이터 삭제 방법
만약 users 테이블에서 userId가 101인 사용자를 삭제하려면 먼저 해당 사용자를 참조하는 orders 테이블의 모든 레코드(노트주문, 마우스 주문)를 먼저 삭제해야 합니다.
MySQL에서 외래 키 생성하기
MySQL에서 테이블에 외래 키 제약조건을 추가하는 방법은 두 가지가 있습니다.
방법 1: 테이블 생성 시 함께 정의
CREATE TABLE members
(
memberId INT PRIMARY KEY,
memberName VARCHAR(50),
email VARCHAR(100)
);
CREATE TABLE reservations
(
reservationId INT PRIMARY KEY,
memberId INT,
reservationDate DATE,
status VARCHAR(20),
CONSTRAINT fk_member_reservation
FOREIGN KEY (memberId) REFERENCES members(memberId)
);방법 2: ALTER TABLE 문으로 추가
#기존 테이블에 외래 키 제약조건 추가
ALTER TABLE reservations
ADD CONSTRAINT fk_member_reservation
FOREIGN KEY (memberId) REFERENCES members(memberId);구문 형식:
CONSTRAINT [제약조건 이름] FOREIGN KEY (필드명) REFERENCES 참조 테이블명(참조 필드명)