MySQL 외래 키 생성 구문
MySQL에서 두 테이블 간의 관계를 설정하려면 외래 키(Foreign Key)를 사용해야 합니다. 외래 키는 한 테이블의 컬럼이 다른 테이블의 기본 키(Primary Key)를 참조하도록 하여 데이터 무결성을 보장하는 중요한 제약 조건입니다.
외래 키를 생성하는 기본 구문은 다음과 같습니다.
ALTER TABLE 참조할_테이블명 ADD CONSTRAINT 제약조건_이름 FOREIGN KEY(외래키_컬럼명) REFERENCES 원본_테이블명(기본키_컬럼명);
예제 테이블 생성하기
구문을 실제로 이해하기 위해 두 개의 테이블을 만들어 보겠습니다.
1. 첫 번째 테이블(Department_Table) 생성
부서 정보를 저장할 첫 번째 테이블을 생성하는 쿼리입니다.
mysql> CREATE TABLE Department_Table
-> (
-> Department_Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Department_Name VARCHAR(30)
-> );
Query OK, 0 rows affected (0.83 sec)여기서 Department_Id는 자동 증가(AUTO_INCREMENT)되는 기본 키로 설정되었습니다.
2. 두 번째 테이블(Employee_Table) 생성
직원 정보를 저장할 두 번째 테이블을 생성하는 쿼리입니다.
mysql> CREATE TABLE Employee_Table
-> (
-> EmployeeID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> EmployeeName VARCHAR(80),
-> Job VARCHAR(30),
-> Department_Id INT NOT NULL REFERENCES department(departmentID)
-> );
Query OK, 0 rows affected (1.12 sec)주의: 인라인 REFERENCES는 외래 키가 되지 않습니다
위 예제에서 Department_Id INT NOT NULL REFERENCES department(departmentID)처럼 컬럼 정의에 직접 REFERENCES를 작성해도 실제 외래 키는 생성되지 않습니다. 이는 MySQL에서 흔히 하는 실수 중 하나로, 문법 오류가 발생하지 않기 때문에 더욱 주의가 필요합니다.
실제 외래 키를 만들려면 앞서 소개한 ALTER TABLE ... ADD CONSTRAINT 구문을 사용해야 합니다.
ALTER TABLE로 외래 키 추가하기
이제 올바른 구문을 사용하여 외래 키를 생성해 보겠습니다.
mysql> ALTER TABLE Employee_Table ADD CONSTRAINT fk_Department_Id FOREIGN KEY(Department_Id)
-> REFERENCES Department_Table(Department_Id);
Query OK, 0 rows affected (2.82 sec)
Records: 0 Duplicates: 0 Warnings: 0쿼리가 성공적으로 실행되면 Employee_Table의 Department_Id 컬럼은 Department_Table의 Department_Id 기본 키를 참조하는 외래 키가 됩니다. 제약 조건 이름은 fk_Department_Id로 지정했으며, 이렇게 명시적인 이름을 지정해 두면 나중에 제약 조건을 수정하거나 삭제할 때 유용합니다.
정리
- 외래 키는 반드시
ALTER TABLE ... ADD CONSTRAINT ... FOREIGN KEY ... REFERENCES ...구문으로 생성해야 합니다. - 컬럼 정의 시 인라인으로 작성한
REFERENCES는 MySQL에서 무시되므로 실제 제약 조건이 적용되지 않습니다. - 참조 대상 컬럼은 반드시 원본 테이블의 기본 키 또는 고유 키(Unique Key)여야 합니다.