詳しくはMySQLのリファレンスを参照デス
リファレンスはコチラ→http://dev.mysql.com/doc/refman/5.1/ja/federated-create.html
さて、FEDERATED TABLEとは端的に言うとOracleのDB LINKのようなものです。
HOST1とHOST2があって、今回はHOST1に実データを持ったテーブルがある仮定で、HOST2からHOST1のテーブルを参照するようにしてみます。
まず、FEDERATED TABLEを使うためには、HOST2がFEDERATEDエンジンをサポートしている必要があります。
FEDERATEDエンジンはMySQL5.0以降から。
HOST1は、FEDERATEDエンジンをサポートしている必要はないそうです。
HOST1では、リンクされる(実データを持っている)テーブルを作成します。
エンジンは何でもいいようですが、今回はInnoDBで実験してみました。
まずは、リンクされるテーブルの作成。これは普通にテーブルを作るだけです。
CREATE TABLE HOST1.link_table(
ID VARCHAR(4)
,COL1 VARCHAR(256)
)ENGINE=InnoDB
DEFAULT CHARSET=sjis
;
次に、FEDERATED TABLEの作成
CREATE TABLE HOST2.federated_table(
ID VARCHAR(4)
,COL1 VARCHAR(256)
)ENGINE=FEDERATED
DEFAULT CHARSET=sjis
CONNECTION='mysql://[user]:[password]@[hostname]/[database]/[table]
;
[]の中身はそれぞれ
user:接続するためのユーザID
password:接続するためのパスワード
hostname:接続先ホスト名
database:接続先データベース名
table:接続先テーブル名
となっています。
SELECT * FROM federated_table で、CONNECTIONで指定したテーブルが参照できるようになりました。
ちなみに、もうひとつ、CREATE SERVER構文を使って、あらかじめコネクション用の定義を用意しておく、という方法もあるようです。
まだ実験段階なので、気になることが少々。
1.HOST1とHOST2で定義が違ってもOKなのか?
2.CREATE SERVERを使ってみる
また、FEDERATED TABLEの制限事項として
・トランザクションをサポートしていない
・ALTER TABLE、DROP TABLE等、定義を変更するようなSQLは発行不可能
等等、あるようです。
ORACLEとは違ってテーブル単位のリンクなので、ORACLE→MySQLと使ってくると若干違和感がありました。
気になることはまた追記します。