MySQL에서 특정 열이 포함된 테이블 찾기
여러 개의 데이터베이스와 테이블이 운영되는 환경에서는 특정 열(Column)이 어느 테이블에 들어 있는지 확인해야 하는 경우가 종종 발생합니다. 이럴 때 테이블을 하나씩 열어볼 필요 없이, information_schema.columns 뷰를 조회하고 COLUMN_NAME 조건을 활용하면 단 한 번의 쿼리로 원하는 열의 위치를 파악할 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
-> (
-> CustomerId int,
-> CustomerName varchar(20),
-> CustomerCountryName varchar(100)
-> );
Query OK, 0 rows affected (1.05 sec)
조회 쿼리 작성하기
다음은 'CustomerCountryName'이라는 열이 현재 MySQL 서버의 어떤 테이블들에 존재하는지 확인하는 쿼리입니다.
mysql> select * from information_schema.columns
where COLUMN_NAME = 'CustomerCountryName';
실행 결과
쿼리를 실행하면 해당 열을 포함한 모든 테이블의 상세 정보가 출력됩니다. 주요 결과만 정리하면 다음과 같습니다.
+--------------+--------------+---------------------+-------------+
| TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | COLUMN_TYPE |
+--------------+--------------+---------------------+-------------+
| sample | demotable189 | CustomerCountryName | varchar(100)|
| web | DemoTable | CustomerCountryName | varchar(20) |
| web | DemoTable | CustomerCountryName | varchar(100)|
+--------------+--------------+---------------------+-------------+
3 rows in set (0.68 sec)
실행 결과에서 확인할 수 있듯이 'CustomerCountryName' 열은 sample과 web이라는 서로 다른 데이터베이스(스키마)에 걸쳐 총 3개의 테이블에 존재합니다.
응용: 특정 데이터베이스로 검색 범위 좁히기
전체 서버가 아닌 특정 데이터베이스 내에서만 검색하고 싶다면 TABLE_SCHEMA 조건을 추가하면 됩니다. 필요한 열만 선택하면 결과도 훨씬 깔끔하게 확인할 수 있습니다.
mysql> SELECT TABLE_SCHEMA, TABLE_NAME
FROM information_schema.columns
WHERE COLUMN_NAME = 'CustomerCountryName'
AND TABLE_SCHEMA = 'web';
이처럼 information_schema를 활용하면 대규모 데이터베이스 환경에서도 특정 열이 사용된 위치를 빠르고 정확하게 추적할 수 있습니다.