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