MySQL에서 특정 테이블에 설정된 모든 제약 조건(Constraint)을 확인해야 하는 경우가 종종 있습니다. 기본 키(PRIMARY KEY), 고유 키(UNIQUE KEY), 외래 키(FOREIGN KEY) 등이 어떻게 정의되어 있는지 파악하고 싶다면 아래의 두 가지 방법 중 하나를 활용하면 됩니다.
방법 1 – SHOW 명령어 사용
가장 간단한 방법은 SHOW CREATE TABLE 명령어를 사용하는 것입니다. 이 명령어는 해당 테이블을 생성할 때 사용된 전체 DDL 문을 그대로 출력해 주기 때문에, 테이블에 설정된 모든 제약 조건을 한눈에 확인할 수 있습니다.
SHOW CREATE TABLE yourTableName;
방법 2 – information_schema 활용
두 번째 방법은 MySQL의 메타데이터 데이터베이스인 information_schema를 조회하는 것입니다. KEY_COLUMN_USAGE 테이블을 쿼리하면 컬럼 이름, 제약 조건 이름, 참조되는 컬럼 및 테이블 정보를 구조화된 형태로 얻을 수 있습니다.
select COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_COLUMN_NAME, REFERENCED_TABLE_NAME
from information_schema.KEY_COLUMN_USAGE
where TABLE_NAME = 'yourTableName';
실제 예제
이미 'ConstraintDemo'라는 테이블이 있다고 가정하고 위 구문을 실행해 보겠습니다.
mysql> select COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_COLUMN_NAME, REFERENCED_TABLE_NAME
-> from information_schema.KEY_COLUMN_USAGE
-> where TABLE_NAME = 'ConstraintDemo';
실행 결과는 다음과 같습니다.
+-------------+-----------------+------------------------+-----------------------+
| COLUMN_NAME | CONSTRAINT_NAME | REFERENCED_COLUMN_NAME | REFERENCED_TABLE_NAME |
+-------------+-----------------+------------------------+-----------------------+
| Id | PRIMARY | NULL | NULL |
| Id | Id | NULL | NULL |
+-------------+-----------------+------------------------+-----------------------+
2 rows in set, 2 warnings (0.04 sec)
결과를 보면 Id 컬럼에 PRIMARY 제약 조건과 UNIQUE 제약 조건(Id)이 각각 설정되어 있는 것을 확인할 수 있습니다.
SHOW 명령어로 결과 비교하기
이번에는 SHOW 명령어로 동일한 테이블을 확인해 보겠습니다.
mysql> show create table ConstraintDemo;
출력 결과는 다음과 같습니다.
+----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ConstraintDemo | CREATE TABLE `constraintdemo` (`Id` int(11) NOT NULL,`Name` varchar(100) NOT NULL, PRIMARY KEY (`Id`), UNIQUE KEY `Id` (`Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
이처럼 SHOW CREATE TABLE 결과에서도 PRIMARY KEY와 UNIQUE KEY가 함께 정의되어 있음을 알 수 있습니다. 두 방법 모두 유용하지만, 애플리케이션 코드에서 제약 조건 정보를 프로그래밍 방식으로 처리해야 한다면 information_schema를 조회하는 방식이 더 적합합니다.