Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 데이터베이스에서 외래 키(Foreign Key)를 확인하는 방법

MySQL에서 특정 테이블에 설정된 외래 키(Foreign Key) 제약 조건을 확인하려면 SHOW CREATE TABLE 문을 사용하면 됩니다. 이 명령어는 해당 테이블을 생성할 때 사용된 전체 DDL 구문을 그대로 보여주기 때문에, 기본 키와 외래 키 등 모든 제약 조건 정보를 한눈에 파악할 수 있습니다.

1. 예제용 첫 번째 테이블 생성

먼저 부모 역할을 할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable1 (Id int NOT NULL PRIMARY KEY, EmployeeName varchar(100));
Query OK, 0 rows affected (0.50 sec)

2. 외래 키 제약 조건이 있는 두 번째 테이블 생성

다음은 외래 키 제약 조건을 포함하여 두 번째 테이블을 생성하는 쿼리입니다.

mysql> create table DemoTable2
    (
       Id int NOT NULL,
       StreetName varchar(100),
       CityName varchar(100),
       CountryName varchar(100),
       PinCode int,
       EmployeeId int,
       PRIMARY KEY(Id),
       FOREIGN KEY (Id) REFERENCES DemoTable1(Id)
    );
Query OK, 0 rows affected (0.46 sec)

여기서 DemoTable2Id 컬럼은 DemoTable1Id 컬럼을 참조하는 외래 키로 설정되었습니다.

3. SHOW CREATE TABLE로 외래 키 확인하기

MySQL 데이터베이스에서 외래 키를 식별하는 가장 간단한 방법은 아래 쿼리를 실행하는 것입니다.

mysql> show create table DemoTable2\G

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

*************************** 1. row ***************************
Table: DemoTable2
Create Table: CREATE TABLE `demotable2` (
    `Id` int(11) NOT NULL,
    `StreetName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
    `CityName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
    `CountryName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
    `PinCode` int(11) DEFAULT NULL,
    `EmployeeId` int(11) DEFAULT NULL,
    PRIMARY KEY (`Id`),
    CONSTRAINT `demotable2_ibfk_1` FOREIGN KEY (`Id`) REFERENCES `demotable1`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
1 row in set (0.00 sec)

출력 결과의 CONSTRAINT 항목을 보면, 외래 키 이름(demotable2_ibfk_1)과 함께 어떤 컬럼이 어느 테이블의 어떤 컬럼을 참조하는지 명확하게 확인할 수 있습니다.

4. 참고: information_schema로 조회하는 방법

SHOW CREATE TABLE 외에도 시스템 뷰인 information_schema.KEY_COLUMN_USAGE를 조회하면 데이터베이스 전체의 외래 키 관계를 목록 형태로 확인할 수 있습니다.

SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'your_database_name'
  AND REFERENCED_TABLE_NAME IS NOT NULL;

이 방법은 여러 테이블에 걸친 외래 키 관계를 한 번에 분석할 때 특히 유용합니다.