mysql에서 information_schema는 메타 데이터에 접근하기 위해서 씁니다. 예를 들자면, 어떤 테이블이 있는지. 어떤 collaction을 쓰는지, 컬럼이 뭐가 있는지 등이 속합니다. 이 중에, 오늘은 3번째 것을 잠깐 다뤄보도록 하겠습니다. 이것과 같이 공식 문서를 보시면 좋습니다.

 


 문제는 다음과 같습니다. mydb에 있는 모든 테이블들에 대해서, 그것과 대응되는 Model 클래스들을 생성해 주세요. 물론, jdbc 프로그래밍에 익숙하시다면야. 조금만 고생하시면 되지만, 익숙치 않다고 하더라도, 할 수 있는 방법이 있습니다. 전 급할 때는 그냥 쿼리문만 날려서 파일로 저장한 뒤에 간단하게 파일 입출력을 하는 식으로 구현하기도 합니다. mydbinformation_schema 안에 있는 view들을 보겠습니다.

 

 

 그러면, CHARACTER_SETS, COLLATIONS, COLUMNS와 같은 것들이 있음을 볼 수 있습니다. 여기서, 우리는 딱 봐도 컬럼에 대해서만 필요함을 알 수 있습니다. 그러므로 COLUMNS에서 조회하도록 하겠습니다.

 

 

  여기에 있는 필드들을 보면, TABLE_NAME, COLUMN_NAME, DATA_TYPE이 있고, TABLE_SCHEMA가 있는데요. 이들은 각각 테이블 이름, 컬럼 이름, 컬럼의 데이터 타입, 그리고 속해있는 database를 의미합니다. 그러면, 우리는 스키마 컬럼을 조건절에 걸고, 컬럼 이름, 테이블 이름, 데이터 타입을 select 하는 게 좋겠습니다.

 

 

 위 쿼리는 컬럼의 정보를 뽑아오는 것에서, 테이블 스키마가 'mydb'인 것만 뽑아옵니다.

 

 

 그러면, TABLE_NAME이, dt, sampleT, sampleT2, testInt, testUINT, ... 등에서 뽑아온 컬럼들이 나옴을 알 수 있습니다.

 

 

 실제로 제가 언급한 테이블들은 mydb 안에 있습니다. 컬럼 명이랑 컬럼 이름이랑 다 뽑아왔습니다. 그런데, 잘 생각해 보면, varchar형이 자바에는 없음을 알 수 있습니다. 대신 String이 있습니다. 그러면, 우리가 저런 것들을 파일로 받아와서 처리를 하기 위해서는 컬럼 타입이 어떤 것들이 나오는지 알아야 합니다. 이들은 값이 중복될 필요가 없으므로, 제거해야 합니다.

 

 

 그러면 이렇게 입력하면 되겠네요.

 

 

 그러면, 이렇게 나오는데, 보기가 불편하군요. 정렬을 해 봅시다. order by 구문을 쓰면 되겠습니다.

 

 

 요래 쓴다면, 설정된 정렬 기준으로 sorting이 되어서 보여집니다.

 

 

 이렇게 나왔다면, 적절히 Java 프로그램에서 적당히 if else 문을 돌려서, datetime에 대응되는 자료형이 무엇인지 리턴하는 메서드를 만들고, 그것을 Model class를 만드는 데 쓰던지 하면 좋겠네요.

 


 그런데, 테이블 명만 알아야 될 때가 있습니다. mydb 안에 있는 table 명만 어떻게 알 수 없을까요? 예를 들자면, 테이블하고 DB만 적었더니, 자동으로 모델이나 mapper가 생성된다던지..

 

 

 쭉 내려보시면 TABLES라는 수상한 테이블이 있음을 알 수 있습니다. 이 테이블의 정보를 보겠습니다.

 

 

 여기에서 중요한 것은 SCHEMA와 NAME임을 알 수 있습니다.

 

 

 이를 토대로 query를 작성해 보겠습니다. mydb에 있는 테이블을 모두 긁어오는 쿼리입니다.

 

 

 그러면 9개의 테이블이 잘 나왔음을 알 수 있습니다. mydb에 접속한 상태에서 show tables; 를 입력해도 동일한 결과가 나옵니다. 아마도, show 구문을 더 많이 쓸 듯 싶으니, 이 부분은 공식 문서를 참조하시는 게 좋을 듯 싶습니다.