• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 创建FEDERATED表

    要创建FEDERATED表,您应该遵循以下步骤:

    1. 在远程服务器上创建表。或者,可以使用以下SHOW CREATE TABLE语句记录现有表的表定义。
    2. 使用相同的表定义在本地服务器上创建表,但是添加将本地表链接到远程表的连接信息。

    例如,您可以在远程服务器上创建下表:

    CREATE TABLE test_table (
        id     INT(20) NOT NULL AUTO_INCREMENT,
        name   VARCHAR(32) NOT NULL DEFAULT '',
        other  INT(20) NOT NULL DEFAULT '0',
        PRIMARY KEY  (id),
        INDEX name (name),
        INDEX other_key (other)
    )
    ENGINE=MyISAM
    DEFAULT CHARSET=utf8mb4;
    

    要创建将联合到远程表的本地表,有两个可用选项。您可以使用来创建本地表并指定用于连接到远程表的连接字符串(包含服务器名称,登录名,密码)CONNECTION,也可以使用以前使用该CREATE SERVER语句创建的现有连接。

    重要

    创建本地表时,它必须具有与远程表相同的字段定义。

    注意

    您可以FEDERATED通过向主机上的表添加索引来提高表的性能。之所以会进行优化,是因为发送到远程服务器的查询将包含WHERE子句的内容,并将发送到远程服务器,然后在本地执行。这样可以减少网络流量,否则网络流量会从服务器请求整个表进行本地处理。

    使用连接创建联合表

    要使用第一种方法,必须CONNECTIONCREATE TABLE语句中的引擎类型之后指定字符串。例如:

    CREATE TABLE federated_table (
        id     INT(20) NOT NULL AUTO_INCREMENT,
        name   VARCHAR(32) NOT NULL DEFAULT '',
        other  INT(20) NOT NULL DEFAULT '0',
        PRIMARY KEY  (id),
        INDEX name (name),
        INDEX other_key (other)
    )
    ENGINE=FEDERATED
    DEFAULT CHARSET=utf8mb4
    CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table';
    
    注意

    CONNECTION替换了COMMENT某些早期版本的MySQL中使用的。

    CONNECTION字符串包含连接到远程服务器所需的信息,该远程服务器包含将用于物理存储数据的表。连接字符串指定服务器名称,登录凭据,端口号和数据库/表信息。在该示例中,远程表位于服务器上remote_host,使用端口9306。名称和端口号应与要用作远程表的远程MySQL服务器实例的主机名(或IP地址)和端口号匹配。

    连接字符串的格式如下:

    scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name
    

    哪里:

    • scheme:公认的连接协议。此时仅mysql支持作为scheme值。
    • user_name:连接的用户名。此用户必须已经在远程服务器上创建,并且必须具有适当的特权来执行所需的操作(SELECTINSERTUPDATE在远程表,等等)。
    • password:(可选)的相应密码user_name
    • host_name:远程服务器的主机名或IP地址。
    • port_num:(可选)远程服务器的端口号。默认值为3306。
    • db_name:保存远程表的数据库的名称。
    • tbl_name:远程表的名称。本地和远程表的名称不必匹配。

    示例连接字符串:

    CONNECTION='mysql://username:password@hostname:port/database/tablename'
    CONNECTION='mysql://username@hostname/database/tablename'
    CONNECTION='mysql://username:password@hostname/database/tablename'
    

    使用CREATE SERVER创建联合表

    如果要FEDERATED在同一服务器上创建多个表,或者要简化创建FEDERATED表的过程,则可以使用该CREATE SERVER语句来定义服务器连接参数,就像使用CONNECTION字符串一样。

    CREATE SERVER语句的格式为:

    CREATE SERVERserver_name
    FOREIGN DATA WRAPPER wrapper_name
    OPTIONS (option [, option] ...)
    

    server_name创建一个新的时,在连接字符串中使用的FEDERATED表。

    例如,要创建与CONNECTION字符串相同的服务器连接:

    CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table';
    

    您将使用以下语句:

    CREATE SERVER fedlink
    FOREIGN DATA WRAPPER mysql
    OPTIONS (USER 'fed_user', HOST 'remote_host', PORT 9306, DATABASE 'federated');
    

    要创建FEDERATED使用此连接的表,您仍将使用CONNECTION关键字,但是指定在CREATE SERVER语句中使用的名称。

    CREATE TABLE test_table (
        id     INT(20) NOT NULL AUTO_INCREMENT,
        name   VARCHAR(32) NOT NULL DEFAULT '',
        other  INT(20) NOT NULL DEFAULT '0',
        PRIMARY KEY  (id),
        INDEX name (name),
        INDEX other_key (other)
    )
    ENGINE=FEDERATED
    DEFAULT CHARSET=utf8mb4
    CONNECTION='fedlink/test_table';
    

    本示例中的连接名称包含连接名称(fedlink)和test_table要链接到的表()的名称,并用斜杠分隔。如果仅指定连接名称而不指定表名称,那么将使用本地表的表名称。

    有关更多信息CREATE SERVER,请参见“ CREATE SERVER语句”。

    CREATE SERVER语句接受与CONNECTION字符串相同的参数。该CREATE SERVER语句更新mysql.servers表中的行。有关连接字符串中的参数,CREATE SERVER语句中的选项以及表中的列之间的对应关系的信息,请参mysql.servers见下表。作为参考,CONNECTION字符串的格式如下:

    scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name
    
    描述CONNECTIONCREATE SERVER选项mysql.servers
    连接方案schemewrapper_nameWrapper
    远程用户user_nameUSERUsername
    远程密码passwordPASSWORDPassword
    远程主机host_nameHOSTHost
    远端埠port_numPORTPort
    远程数据库db_nameDATABASEDb