この記事では、主に mysql のデータベース間の関連付け query メソッドを紹介します。必要な方は、
ビジネス シナリオ: 異なるデータベースのテーブルを関連付けるクエリ
たとえば、関連付けられるテーブルは次のとおりです。マシン A 上のデータベース A 内のテーブル A && マシン B 上のデータベース B 内のテーブル B。
この場合、「select A.id,B.id from A left join B on ~~~;」は実行できませんが、ビジネス要件は不変であり、データベース設計も不変であるため、My ball傷つく。 。
解決策: マシン A 上のデータベース A にテーブル B を作成します。 。 。
もちろんこれは冗談ではなく、MySQL のフェデレーテッド エンジンに基づいたテーブル作成方法を使用しています。
テーブル作成ステートメントの例:
CREATE TABLE `table_name`(......) ENGINE =FEDERATED CONNECTION='mysql://[username]:[password]@[location]:[port]/[db-name]/[table-name]'
前提条件: mysql はフェデレーテッド エンジンをサポートしている必要があります (show エンジンを実行します。サポートされているかどうかを確認できます)。
FEDERATED エンジンがあってもサポートが NO の場合、mysqlインストールが有効になっていないことを意味します。my.cnf ファイルの末尾に移動して、federated という行を追加します。 、mysql を再起動します
まったく動作しない場合 FEDERATED 行がない場合は、mysql にこのエンジンがインストールされていないことを意味するため、運用とメンテナンスに行くのが最善です。次のアクションは比較的大きいので、それを実行する方法がわかりません
説明: FEDERATED エンジンを通じて作成されたテーブルにはテーブル定義ファイルのみがローカルにあり、データ ファイルはリモートに存在します。このエンジンを通じて、Oracle の DBLINK と同様のリモート データ アクセス機能を実現できます。つまり、このテーブル作成方法では、データベース A にテーブル B のテーブル構造ファイルのみが作成されます。テーブルのインデックス、データ、およびその他のファイルはマシン B 上のデータベース B にまだあります。これは、単に作成するのと同じです。データベース A にあります。テーブル B へのショートカットです。
その結果、卵は痛くなくなりました。 。
注意すべき点がいくつかあります:
1. ローカルテーブルの構造はリモートテーブルの構造とまったく同じである必要があります。
2. リモートデータベースは現在 MySQL に限定されています
3. トランザクションはサポートされていません
他のネットユーザーからの追加コメント:
CREATE TABLE IF NOT EXISTS `logintoken` ( `id` int(11) NOT NULL AUTO_INCREMENT, `type` char(1) NOT NULL DEFAULT '0', `loginName` varchar(20) DEFAULT NULL, `token` varchar(2000) DEFAULT NULL, `tokenExpiredTime` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE =FEDERATED CONNECTION='mysql://root:root@192.168.5.102:3306/zysso/logintoken';
リモート 5.12 のログイントークンテーブルを使用するには、自分で FEDERATED を有効にするだけで済みます。5.12 で有効にする必要はありません
。以上がMySQLにおけるクロスデータベース関連のクエリのやり方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。