首页 数据库 Mysql跨库操作

Mysql跨库操作

在 MySQL 中,操作多数据源(例如从库 A 和库 B)进行联查的情况,可以分为以下两种场景:

A 库和 B 库在同一个 MySQL 实例
当 A 库和 B 库在同一个 MySQL 实例下时,可以直接使用跨库联查查询。示例如下:

SELECT A.column1, B.column2
FROM A.table1 AS A
LEFT JOIN B.table2 AS B
ON A.id = B.id;
因为 MySQL 实例本身已经能够处理这种跨库查询。只需要确保你在查询时使用了正确的库名和表名即可。

A 库和 B 库在不同的 MySQL 实例
当 A 库和 B 库在不同的 MySQL 实例下时,跨实例联查会更复杂,因为 MySQL 不直接支持跨实例的联查。你有以下几种方法来实现跨实例联查:

使用应用层合并
在应用层进行联查。首先从一个数据库中提取数据,然后在应用程序中处理和合并这些数据。例如:

1. 从 A 库中查询数据并将其存储在应用程序中。
2. 从 B 库中查询数据并将其存储在应用程序中。
3. 在应用程序中执行联查逻辑来合并数据。
使用中间数据库
可以将 A 库和 B 库中的数据导入到一个中间数据库中(例如将两个库的数据同步到一个新的数据库中),然后在这个中间数据库中进行联查。这个方法可能涉及数据同步或 ETL(提取、转换、加载)过程。

使用 Federated 引擎(有限支持)
MySQL 提供了 Federated 引擎,允许在不同的 MySQL 实例之间访问表。你可以在一个 MySQL 实例中创建一个 Federated 表,它映射到另一个 MySQL 实例中的表。这使得你可以通过 Federated 表进行跨实例查询。例如:

1. 在 A 库的 MySQL 实例中创建一个 Federated 表,它指向 B 库的表。
2. 使用这个 Federated 表进行联查。
CREATE TABLE federated_table (
id INT(11) NOT NULL,
column2 VARCHAR(255),
PRIMARY KEY (id)
)
ENGINE=FEDERATED
CONNECTION='mysql://user:password@host:port/B_database/table2';

-- 然后执行联查
SELECT A.column1, B.column2
FROM A.table1 AS A
LEFT JOIN federated_table AS B
ON A.id = B.id;
总结
同一 MySQL 实例:可以直接使用 SQL 语法进行跨库联查。
不同 MySQL 实例:需要借助应用层合并、中间数据库或 Federated 引擎等方法来实现跨实例联查。
上游库可以访问的情况下尽量只读取且用redis缓存.
上游数据库不可以访问的情况下用接口交互.

如果这篇文章对你有用,可以关注本人微信公众号获取更多ヽ(^ω^)ノ ~在 MySQL 中,操作多数据源(例如从库 A 和库 B)进行联查的情况,可以分为以下两种场景:

A 库和 B 库在同一个 MySQL 实例
当 A 库和 B 库在同一个 MySQL 实例下时,可以直接使用跨库联查查询。示例如下:

SELECT A.column1, B.column2
FROM A.table1 AS A
LEFT JOIN B.table2 AS B
ON A.id = B.id;
因为 MySQL 实例本身已经能够处理这种跨库查询。只需要确保你在查询时使用了正确的库名和表名即可。

A 库和 B 库在不同的 MySQL 实例
当 A 库和 B 库在不同的 MySQL 实例下时,跨实例联查会更复杂,因为 MySQL 不直接支持跨实例的联查。你有以下几种方法来实现跨实例联查:

使用应用层合并
在应用层进行联查。首先从一个数据库中提取数据,然后在应用程序中处理和合并这些数据。例如:

1. 从 A 库中查询数据并将其存储在应用程序中。
2. 从 B 库中查询数据并将其存储在应用程序中。
3. 在应用程序中执行联查逻辑来合并数据。
使用中间数据库
可以将 A 库和 B 库中的数据导入到一个中间数据库中(例如将两个库的数据同步到一个新的数据库中),然后在这个中间数据库中进行联查。这个方法可能涉及数据同步或 ETL(提取、转换、加载)过程。

使用 Federated 引擎(有限支持)
MySQL 提供了 Federated 引擎,允许在不同的 MySQL 实例之间访问表。你可以在一个 MySQL 实例中创建一个 Federated 表,它映射到另一个 MySQL 实例中的表。这使得你可以通过 Federated 表进行跨实例查询。例如:

1. 在 A 库的 MySQL 实例中创建一个 Federated 表,它指向 B 库的表。
2. 使用这个 Federated 表进行联查。
CREATE TABLE federated_table (
id INT(11) NOT NULL,
column2 VARCHAR(255),
PRIMARY KEY (id)
)
ENGINE=FEDERATED
CONNECTION='mysql://user:password@host:port/B_database/table2';

-- 然后执行联查
SELECT A.column1, B.column2
FROM A.table1 AS A
LEFT JOIN federated_table AS B
ON A.id = B.id;
总结
同一 MySQL 实例:可以直接使用 SQL 语法进行跨库联查。
不同 MySQL 实例:需要借助应用层合并、中间数据库或 Federated 引擎等方法来实现跨实例联查。
上游库可以访问的情况下尽量只读取且用redis缓存.
上游数据库不可以访问的情况下用接口交互.

如果这篇文章对你有用,可以关注本人微信公众号获取更多ヽ(^ω^)ノ ~

站心网

在 MySQL 中,操作多数据源(例如从库 A 和库 B)进行联查的情况,可以分为以下两种场景:A 库和 B 库在同..

为您推荐

MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题

问题背景在停服发版更新时,需对 200GB 大表(约 200 亿行数据)进行快速备份以预防操作失误。因为曾经出现过有开发写的发版语句里,UPDATE语句的WHERE条件写错了,原本只需要更新几行数据,最终导致更新了半张表的..

服务器安装数据库MySQL8.0版本,打包导入到MySQL5.6失败的结局方式

最近数据库升级为mysql8.0,在使用过程中发现一些问题,首先mysql8.0有很多新特性,对服务器配置要求较高,所有就考虑把数据库版本切换到MySQL5.6,经过多出测试处理发现在8.0数据库打包的数据导入到5.6总是报错,或..

MySQL查询建表规范

因为之前一直再查找一些比较好的数据库规范,以方便在开发时连接 MySQL 进行查询/建表的时候,能根据规范来执行,达到提高 查询速度 / 执行 SQL 的性能 和提升 MySQL 的整体性能, 这里主要是存放一些比较好的一些数..

必须掌握的MySQL优化指南(2)

4|0表分区MySQL 在 5.1 版引入的分区是一种简单的水平拆分,用户需要在建表的时候加上分区参数,对应用是透明的无需修改代码。对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成,实现分区的代码实..

mysql分表简单介绍

一、Mysql分表的原因1、当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会停在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。2、mysql中有一种机制是表锁定..

MySQL创建用户与授权

一, 创建用户: 命令:CREATE USER'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, ..

必须掌握的MySQL优化指南(1)

1.单表优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度。一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时..

Mysql查询的一些操作(查表名,查字段名,查当月,查一周,查当天)

查询数据库中所有表名select table_name from information_schema.tables where table_schema='tools' and table_type='base table';查询指定数据库中指定表的所有字段名column_nameselect column_n..

MySQL查看、修改字符集及Collation

前言在使用MySQL的过程中,可能会出现初始设计使用的字符集或Collation不符合当前需求的情况。如使用utf8的表(MySQL中的utf8即utf8mb3)要支持emoji,而utf8mb3不支持emoji(emoji需要4个字节,而utf8mb3最长只支持..

MySQL SQL调优之索引

本篇记录MySQL的索引知识学习笔记,也方便自己以后查找复习一、索引的概念MySQL官方给出的索引定义:索引(Index)是帮助MySQL高效获取数据的数据结构。所以说索引就是排好序的快速查找数据结构二、索引分类MySQL的索..

mysql随机获取一条或者多条数据

语句一:select * from users order by rand() LIMIT 1MYSQL手册里面针对RAND()的提示大概意思就是,在 ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描,导致效率相当相当的低,效率不行,切..

Mysql子查询

子查询出现在select语句中的select语句,称为子查询或内查询。外部的select查询语句,称为主查询或外查询。子查询分类按结果集的行列数不同分为4种标量子查询(结果集只有一行一列)列子查询(结果集只有一列多行)..

MySQL批量插入的分析

1、背景我们在工作中基本都会碰到批量插入数据到DB的情况,这个时候我们就需要根据不同的情况选择不同的策略。只要了解sql,就应该知道,向table中插入数据的命令,至少有insert和replace这两种,使用哪一种命令,和..

分享5个开源的.NET Excel读写操作库

本文给大家分享 5 个开源的 .NET Excel 读写操作库,它们广泛用于处理 Excel 文件,包括读取、写入、导入和导出数据。1. EPPlus简介:EPPlus 是功能强大的 .NET 库,用于创建和读取 Excel 文件(.xlsx 和 .xlsm 格式..

JavaScript中字典的常用操作

字典是一种以键值对存在的数据结构,他的底层是Array数组字典初始化和数组初始化的区别:数组的初始化:var arr = [1,2,3,4,5];//使用中括号字典的初始化: var names = {“a”:“aaa”,“b”:“bbb”,“c”:“ccc”}..

Mysql查询一段时间内的数据

select * from wap_content where week(created_at) = week(now)如果你要严格要求是某一年的,那可以这样查询一天:select * from table where to_days(column_time) = to_days(now());select * from table where da..

MySQL 5.x和MySQL 8.x数据库的区别

MySQL 是开源关系型数据库的代表,广泛应用于不同规模的 Web 和企业应用中。从 MySQL 5.x 到 MySQL 8.x 的升级带来了大量功能改进和性能提升。为了帮助大家更直观地理解两者的区别,本文将通过详细介绍并结合实际的 ..

宝塔里mysql停止了自动启用脚本

mysql突然停止的原因有多种,这里不列举,可以排查具体原因。如果停止后,还可以手工正常启用mysql,那可以考虑把shell脚本添加到宝塔的计划任务里,定时每隔几分钟检测一次,让mysql自动检测停止后立马启用。ps=`ps..

EntityFramework异常Win32Exception (0x80004005): 等待的操作过时。

使用EntityFramework生成的Sql语句,出现下列异常:异常详细信息: System.ComponentModel.Win32Exception: 等待的操作过时。代码如下:query.Count = items.Count();var result = items.OrderByDescending(m => m.Id..

MySQL如何建数据库

MySQL是一款非常流行的关系型数据库管理系统。无论是在企业还是个人项目中,都经常使用MySQL数据库。在使用MySQL之前,需要先创建一个数据库。本文将介绍如何建立MySQL数据库。一、安装MySQL在开始建立MySQL数据库之..

发表回复

返回顶部

微信分享

微信分享二维码

扫描二维码分享到微信或朋友圈

链接已复制