MySQL에서 외래 키 제약 조건 목록 조회하기
데이터베이스를 운영하다 보면 특정 스키마에 어떤 외래 키(Foreign Key) 제약 조건이 설정되어 있는지 확인해야 할 때가 있습니다. 예를 들어 여러 개의 테이블을 가진 business라는 데이터베이스가 있다고 가정해 보겠습니다. 이 데이터베이스에 정의된 외래 키 제약 조건만 골라서 확인하려면 MySQL의 information_schema.referential_constraints 테이블을 조회하면 됩니다.
외래 키 제약 조건 조회 쿼리
아래 쿼리는 constraint_schema 조건을 사용해 'business' 데이터베이스에 속한 외래 키 제약 조건만 필터링하여 보여줍니다.
mysql> select *
−> from information_schema.referential_constraints
−> where constraint_schema = 'business';
조회 결과 해석
쿼리를 실행하면 해당 데이터베이스에 등록된 모든 외래 키 제약 조건이 출력됩니다. 주요 컬럼의 의미는 다음과 같습니다.
- CONSTRAINT_NAME: 외래 키 제약 조건의 이름
- TABLE_NAME: 외래 키가 설정된(자식) 테이블
- REFERENCED_TABLE_NAME: 참조되는(부모) 테이블
- UPDATE_RULE / DELETE_RULE: 부모 테이블의 값이 변경되거나 삭제될 때 적용되는 규칙
+--------------------+-------------------+--------------------------+---------------------------+--------------------------+------------------------+--------------+-------------+-------------+-------------------+-----------------------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | UNIQUE_CONSTRAINT_CATALOG | UNIQUE_CONSTRAINT_SCHEMA | UNIQUE_CONSTRAINT_NAME | MATCH_OPTION | UPDATE_RULE | DELETE_RULE | TABLE_NAME | REFERENCED_TABLE_NAME |
+--------------------+-------------------+--------------------------+---------------------------+--------------------------+------------------------+--------------+-------------+-------------+-------------------+-----------------------+
| def | business | ConstChild | def | business | PRIMARY | NONE | NO ACTION | NO ACTION | childdemo | parentdemo |
| def | business | ConstFK | def | business | PRIMARY | NONE | NO ACTION | NO ACTION | tblf | tblp |
| def | business | constFKPK | def | business | PRIMARY | NONE | NO ACTION | NO ACTION | foreigntable | primarytable1 |
| def | business | FKConst | def | business | PRIMARY | NONE | NO ACTION | NO ACTION | foreigntabledemo | primarytabledemo |
| def | business | primarytable1demo_ibfk_1 | def | business | PRIMARY | NONE | NO ACTION | NO ACTION | primarytable1demo | foreigntable1 |
| def | business | StudCollegeConst | def | business | PRIMARY | NONE | NO ACTION | NO ACTION | studentenrollment | college |
+--------------------+-------------------+--------------------------+---------------------------+--------------------------+------------------------+--------------+-------------+-------------+-------------------+-----------------------+
6 rows in set (0.07 sec)
위 결과를 보면 'business' 데이터베이스에는 총 6개의 외래 키 제약 조건이 존재하며, 각 제약 조건이 어떤 자식 테이블과 부모 테이블 사이의 관계를 정의하는지 한눈에 파악할 수 있습니다.
특정 테이블의 외래 키만 조회하기
데이터베이스 전체가 아닌 특정 테이블의 외래 키만 확인하고 싶다면 TABLE_NAME 조건을 추가로 지정하면 됩니다.
SELECT CONSTRAINT_NAME, TABLE_NAME, REFERENCED_TABLE_NAME
FROM information_schema.referential_constraints
WHERE constraint_schema = 'business'
AND TABLE_NAME = 'childdemo';
필요한 컬럼만 선택해서 조회하면 결과가 더 깔끔하게 정리되므로, 실무에서는 위와 같이 필요한 정보만 추출하는 방식을 권장합니다.