MySQL에서 기본 키를 외래 키로 참조하기
MySQL에서는 ALTER TABLE 문과 ADD CONSTRAINT 구문을 사용하여 한 테이블의 기본 키(Primary Key)를 다른 테이블의 외래 키(Foreign Key)로 참조할 수 있습니다. 이를 통해 두 테이블 간의 참조 무결성을 보장할 수 있습니다.
기본 문법
외래 키 제약 조건을 추가하는 기본 문법은 다음과 같습니다.
alter table yourSecondTableName add constraint `yourConstraintName` foreign key(`yourSecondTableNamePrimaryKey`) references yourFirstTableName(yourFirstTablePrimaryKeyColumnName);
예제: 첫 번째 테이블 생성
먼저 위 문법을 이해하기 위해 예제 테이블을 생성해 보겠습니다. 아래 쿼리는 첫 번째 테이블인 demo65를 생성합니다.
mysql> create table demo65 -> ( -> id int not null primary key, -> name varchar(20) -> ); Query OK, 0 rows affected (0.57 sec)
여기서 id 컬럼은 NOT NULL 제약 조건과 함께 기본 키로 설정되었습니다.
예제: 두 번째 테이블 생성
다음은 두 번째 테이블인 demo66을 생성하는 쿼리입니다.
mysql> create table demo66 -> ( -> user_id int not null primary key, -> address varchar(200) -> ); Query OK, 0 rows affected (1.80 sec)
user_id 컬럼 역시 기본 키로 설정되어 있으며, 이 컬럼을 통해 첫 번째 테이블의 기본 키를 참조하게 됩니다.
기본 키를 외래 키로 참조하는 쿼리
이제 ALTER TABLE 문을 사용하여 demo66 테이블의 user_id 컬럼이 demo65 테이블의 id 컬럼을 참조하도록 외래 키 제약 조건을 추가합니다.
mysql> alter table demo66 -> add constraint `id_fk` -> foreign key(`user_id`) -> references demo65(id); Query OK, 0 rows affected (3.76 sec) Records: 0 Duplicates: 0 Warnings: 0
위 쿼리가 성공적으로 실행되면 id_fk라는 이름의 외래 키 제약 조건이 생성됩니다.
테이블 구조 확인하기
외래 키가 정상적으로 적용되었는지 확인하려면 SHOW CREATE TABLE 명령어를 사용하여 테이블의 전체 정의를 조회할 수 있습니다.
mysql> show create table demo66;
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table +--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | demo66 | CREATE TABLE `demo66` ( `user_id` int NOT NULL, `address` varchar(200) DEFAULT NULL, PRIMARY KEY (`user_id`), CONSTRAINT `id_fk` FOREIGN KEY (`user_id`) REFERENCES `demo65` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci | +--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
출력 결과에서 CONSTRAINT `id_fk` FOREIGN KEY (`user_id`) REFERENCES `demo65` (`id`) 부분을 통해 외래 키 제약 조건이 성공적으로 추가된 것을 확인할 수 있습니다.
정리
MySQL에서 서로 다른 테이블 간에 기본 키를 외래 키로 참조하는 방법은 다음과 같습니다.
- ALTER TABLE 문으로 대상 테이블을 지정합니다.
- ADD CONSTRAINT로 제약 조건 이름을 정의합니다.
- FOREIGN KEY 절에 외래 키로 사용할 컬럼을 지정합니다.
- REFERENCES 절에 참조할 테이블과 해당 테이블의 기본 키 컬럼을 명시합니다.
이렇게 설정하면 두 테이블 간 데이터 일관성이 유지되며, 참조 무결성 위반 시 MySQL이 자동으로 오류를 반환하여 잘못된 데이터 입력을 방지할 수 있습니다.