MySQL中的跨库查询主要分为两种情况,一种是同一个服务的跨库查询;二是不同服务的跨库查询;它们的跨库查询是不同的,下面详细介绍这两种跨库查询。1、同一个服务的跨库查询同一个服务的跨库查询,关联查询只需要包含数据名即可。SQL是这样写的:SELECT*FROMdatabase1.table1xJOINdatabase2.table2yONx。field1=y.field2;例如:2.不同服务的跨库查询不同服务的跨库查询不能通过添加数据名直接关联,这里需要MySQL数据库中的联邦引擎。具体过程如下:需求:服务A上的数据库X的表A需要关联到服务B上的数据库Y的表B,查询需要的数据;1、首先查看MySQL数据库是否安装了FEDERATED引擎,使用命令showengines;如上图:如上图,MySQL已经安装了FEDERATED引擎,但是Support是No,也就是没有启用。到my.cnf文件末尾添加一行FEDERATED,重启MySQL。如果您没有找到FEDERATED引擎,则需要安装它。2、在服务A上的数据库X中创建表B,语句如下:CREATETABLEtable_name(...)ENGINE=FEDERATEDCONNECTION='mysql://[username]:[password]@[localtion]:[port]/[db-name]/[table-name]'说明:FEDERATED引擎创建的表本地只有表定义文件,数据文件存在于远程数据库中。通过该引擎可以实现远程数据访问功能。也就是说,这种建表方式会在服务A上的数据库X中创建一个表结构文件(即服务B上的数据库Y中的表B的表结构文件),以及索引、数据等文件该表仍在数据库中。在服务B上的数据库Y中,相当于一个shortcut,方便关联。3、在服务A上的数据库X中,直接关联表A和表B,就可以查询需要的数据了。这种方式有以下几点需要注意:1)这种跨库查询方式不支持事务,所以最好不要使用事务。2)、不能修改表结构。3)MySQL就是采用这种跨库查询的方式。远程数据库目前只支持MySQL,其他数据库不支持。4)表结构必须与目标数据库表完全一致。
