ホームページ  >  記事  >  データベース  >  mysqlのクロスデータベースクエリの問題を解決する方法

mysqlのクロスデータベースクエリの問題を解決する方法

PHPz
PHPz転載
2023-05-27 14:03:282841ブラウズ

1. クロスデータベース クエリの最初のタイプは、同じ mysql サーバーにある 2 つの異なるデータベース間の共同クエリです。その関係は、以下の

mysqlのクロスデータベースクエリの問題を解決する方法

に示されているとおりです。同じ mysql サーバーでは、2 つの異なるデータをデータベース名に直接追加して、データベース間クエリを実現できます。

#
select * from t_test1 t1, test2.t_test2 t2 where t1.id = t2.id

mysqlのクロスデータベースクエリの問題を解決する方法

SQL クエリを実行して結果を取得します

mysqlのクロスデータベースクエリの問題を解決する方法

2. 2 番目のタイプのクロスデータベース クエリは、クロスデータベース クエリを実装するために 2 つの異なるサーバー (物理サーバー) にインストールされた mysql サーバーです。実装原理は仮想マッピングに似ています。 mysql の別のストレージ エンジンである Federated を使用する必要があります。FEDERATED ストレージ エンジンは、ローカル テーブルではなくリモート データベースのテーブルのデータにアクセスします。

この機能は、一部の開発アプリケーションに利便性をもたらします。フェデレーテッド テーブルをローカルに直接構築して、リモート データ テーブルに接続できます。構成後、ローカル テーブルのデータをリモート データ テーブルと直接同期できます。実際、このエンジンは実際にデータを保存するのではなく、必要なデータは他の MySQL サーバーに接続することによって取得されます。

mysql はデフォルトではフェデレーテッド ストレージ エンジンを有効にしないため、構成ファイルで有効にする必要があります;

#在[mysqld] 下 添加 federated 然后重启mysql服务就可以了
[mysqld]
federated

以下に示すように:

mysqlのクロスデータベースクエリの問題を解決する方法

#输入命令查看引擎开启状态
show engines;

が表示され、オンになっています

mysqlのクロスデータベースクエリの問題を解決する方法

次に、test1 データベースに仮想テーブルを作成し、test2 ライブラリの t_test2 テーブルを test1 ライブラリにマップできます。

CREATE TABLE `t_test2` (
  `id` int NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8mb3 COMMENT='远程测试表t_test2' CONNECTION='mysql://root:123456@127.0.0.1:3306/test2/t_test2' ;
/**

CONNECTION='mysql://root:123456$@127.0.0.1:3306/test2/t_test2' 这个配置是关键
root:代表远程数据库的用户
123456:代表远程数据的密码
127.0.0.1:代表远程数据库的ip地址,域名也可以
test2:代表远程数据库的数据库名称
t_test2:代表远程数据库中的哪一张表
**/

SQL ステートメントの実行

mysqlのクロスデータベースクエリの問題を解決する方法

テーブル t_test2 が作成されたことがわかります。このテーブルは実際には存在せず、単なるリモート マッピングです

mysqlのクロスデータベースクエリの問題を解決する方法

FEDERATED エンジンを使用するとわかります

mysqlのクロスデータベースクエリの問題を解決する方法

テーブルの作成後、sql

select * from t_test1 t1, t_test2 t2 where t1.id = t2.id
# を記述できます。 ##実行結果を確認できます

mysqlのクロスデータベースクエリの問題を解決する方法

#フェデレーション使用上の注意:

1. ローカルで作成されたテーブル名はリモート サーバー上に存在する必要があり、作成されたフィールドは、リモート テーブルのフィールドでもある必要があります。これは、「リモート テーブルのフィールドは少ないですが、それ以上ではありません。ローカル ストレージ エンジン

2 を選択してください。ローカル仮想テーブルの構造を変更しても、変更されません。」リモート テーブルの構造を変更します

3. truncate コマンドはリモート テーブル データをクリアします

4.drop コマンドは仮想テーブルのみを削除し、リモート テーブル

## は削除しません#5. select count(*)、select * from limit M、N などのステートメントを実行する 効率は非常に低く、データ量が多い場合には重大な問題が発生しますが、主キーまたはインデックス列によるクエリは非常に効率的です。たとえば、次のクエリは非常に遅いです (ID がメイン インデックスであると仮定します)

select id from db.tablea where id >100 limit 10 ;

以上がmysqlのクロスデータベースクエリの問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。