自分の今までの(浅い)データベースの経験からデータベースサーバには次のようなスキーマが存在する。
- データベースサーバ(=1コンピュータ) ※クラスタ環境の場合は一つのコンピュータとは限らない。
- データベース(一つのデータベースサーバに複数のデータベースが存在し得る)
- テーブル(一つのデータベースに複数のテーブルが存在し得る)
- ストアドプロシージャ(一つのデータベースに複数のテーブルが存在し得る)
- ビュー(一つのデータベースに複数のビューが存在し得る)
- データベースユーザ(一つのデータベースサーバに複数のユーザが存在し得る)
と、基本的な基本はこんな感じだが、それをどうすれば取得できるか。MySQLにはデフォルトでinformation_schema, mysqlそしてtestの3つのデータベースが存在する。

information_schemaという名前のデータベースがあるが、これにはこのMySQLのスキーマの情報が詰め込まれているのだ。コミュニケーションに関するコミュニケーションのことをメタコミュニケーションというが、information_schemaはデータベースに関するデータベースなのでメタデータベースと呼んでもいいだろうか。infromation_schemaデータベースに存在するテーブルは次の通り。

これらをクエリしていけばMySQLのスキーマの情報を取得できそうだ。初めはSCHEMATAテーブルをクエリしてMySQLに存在するデータベースを羅列してみよう。以前に作成してたMySqlEngineに次のようなメソッドを追加してみた。

上のメソッドはジェネリックを使ってMySqlDatabase(プロパティが3つの単純なクラス)を返す。このメソッドに対してテストケースを書いてみた。

結果は・・・
—— Test started: Assembly: UnitTest.dll ——
information_schema
mysql
test
1 succeeded, 0 failed, 0 skipped, took 0.50 seconds.
とこんな感じで、簡単にMySQLに存在するデータベースをリストするメソッドができてしまったのである。
コメント書き込み