MySQLで2つのデータベース構造を比較する

MySQLで2つのデータベース構造を比較する場合に必要そうなのは

  • Table
  • Columns
  • Index
  • Foreign Key

あたりでしょうか。それぞれのチェック方法をまとめてみます。

Table

SELECT TABLE_NAME,ENGINE,TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'org001' order by TABLE_NAME;

http://dev.mysql.com/doc/refman/5.6/ja/tables-table.html

Columns

SELECT COLUMN_NAME,COLUMN_DEFAULT,IS_NULLABLE,DATA_TYPE,COLLATION_NAME,COLUMN_TYPE,COLUMN_KEY,EXTRA FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = 'org001' and table_name = 'turbine_user' order by COLUMN_NAME;

http://dev.mysql.com/doc/refman/5.6/ja/columns-table.html

IndexとForeign Key

TABLE_CONSTRAINTSもありますが、KEY_COLUMN_USAGEに内包されているっぽいので、KEY_COLUMN_USAGEの方を使ってしまうのがよさそうです。

SELECT CONSTRAINT_NAME,COLUMN_NAME,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE table_schema = 'org001' and table_name = 'turbine_role_permission' order by CONSTRAINT_NAME,COLUMN_NAME;

http://dev.mysql.com/doc/refman/5.6/ja/key-column-usage-table.html

http://dev.mysql.com/doc/refman/5.6/ja/table-constraints-table.html

参考

http://kkkw.hatenablog.jp/entry/20120706