この記事では主に MySQL のクロスデータベース関連のクエリ方法を紹介します。必要な方は参考にしていただければ幸いです。
ビジネス シナリオ: 異なるデータベースのテーブルを関連付けるクエリ
たとえば、関連付けられるテーブルは次のとおりです: マシン A 上のデータベース A のテーブル A && マシン B のデータベース B のテーブル B。
この場合、「select A.id,B.id from A left join B on ~~~;」は実行できませんが、ビジネス要件は不変であり、データベース設計も不変であるため、面倒です。お尻。 。
解決策: マシン 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 ファイルの最後に行を追加して 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 で有効にする必要はありません。
Oracle によるクロスデータベース クエリの実装方法
クロスデータベース トランザクションの一貫性の問題の解決策 (例)
[MSSQL]SQLServer のクロスデータベース クエリ
以上がmysqlでのデータベース間の関連付けクエリメソッドの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。