当您使用标准存储引擎之一(例如MyISAM
,CSV
或
InnoDB
)创建表时,该表由表定义和关联数据组成。创建
FEDERATED
表时,表定义是相同的,但数据的物理存储是在远程服务器上处理的。
一个FEDERATED
表由两个元素组成:
具有数据库表的远程服务器,该数据库表又由表定义(存储在
.frm
文件中)和关联表组成。远程表的表类型可以是远程mysqld
服务器支持的任何类型,包括MyISAM
或InnoDB
。具有数据库表的本地服务器,其中表定义与远程服务器上相应表的定义相匹配。表定义存储在
.frm
文件中。但是,本地服务器上没有数据文件。相反,表定义包括指向远程表的连接字符串。
当对本地服务器上的表执行查询和语句时
FEDERATED
,通常会从本地数据文件插入、更新或删除信息的操作被发送到远程服务器执行,在那里它们更新远程服务器上的数据文件或从远程服务器返回匹配的行。
FEDERATED
表设置
的基本结构如图 15.2 “FEDERATED Table Structure”所示。
当客户端发出引用
FEDERATED
表的 SQL 语句时,本地服务器(执行 SQL 语句的地方)和远程服务器(物理存储数据的地方)之间的信息流如下:
存储引擎查看表中的每一列,
FEDERATED
并构建引用远程表的适当 SQL 语句。该语句使用 MySQL 客户端 API 发送到远程服务器。
远程服务器处理语句,本地服务器检索语句产生的任何结果(受影响的行计数或结果集)。
如果语句生成结果集,则每一列都将转换为
FEDERATED
引擎期望的内部存储引擎格式,并可用于将结果显示给发出原始语句的客户端。
本地服务器使用 MySQL 客户端 C API 函数与远程服务器通信。它调用
mysql_real_query()
发送语句。要读取结果集,它会
mysql_store_result()
使用
mysql_fetch_row()
.