假设有一台数据库地址为192.168.1.1
里面有表customer
字段id customername number_id另一台数据库服务器地址为192.168.1.2
里面有表number
字段id numbername现在我想显示customername,numbername
如何进行2个数据库的关联查询另外,不要先查出number_id带入192.168.1.2服务器中查numbername。我要2台数据库表直接关联查询。。
类似一台服务器2表关联的left join那种。。有没有办法?
里面有表customer
字段id customername number_id另一台数据库服务器地址为192.168.1.2
里面有表number
字段id numbername现在我想显示customername,numbername
如何进行2个数据库的关联查询另外,不要先查出number_id带入192.168.1.2服务器中查numbername。我要2台数据库表直接关联查询。。
类似一台服务器2表关联的left join那种。。有没有办法?
在host: 168.56.41.11建个FEDERATED 表 CREATE TABLE xxx_b (
id INT(20) NOT NULL AUTO_INCREMENT,
username VARCHAR(32) NOT NULL DEFAULT '',
password VARCHAR(32),
PRIMARY KEY (id)
)
ENGINE=FEDERATED
CONNECTION='mysql://broot:[email protected]:3306/dbname/b表'; select * from xxx_b 就可以了
http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#federated-storage-engine
方法很简单,先连接192.168.1.1,取出用where条件筛选后的一个表的数据;然后再连接192.168.1.2,取出用where条件筛选后的另一个表的数据;然后用程序语言实现联结~
如果192.168.1.1表里有10000条数据,192.168.1.2连接要执行查询多少次、
你不可能把number_id赋值给数组,where条件给数组查吧、
for(i=0;i<list1.size();i++){
for(j=0;j<list2.size();i++){
if(list1[i][id]==list[j][id]){
取出list[i];
}
}
}
我说用那个方法的前提是LZ不想更换存储引擎,如果两个数据表中的数据量很大,两个for循环的做法确实显得很笨,它只适合少量数据~
在应用程序里解决联结问题,尤其是不同数据库服务器之间表的联结问题,在特定情形下,是比较通用且高效的方法,不但锁定的时间更短,且检查的行也更少。
下面举个分解联结(Join Decomposition)例子(引自高效MySQL):
mysql> SELECT * FROM tag
-> JOIN tag_post ON tag_post.tag_id=tag.id
-> JOIN post ON tag_post.post_id=post.id
-> WHERE tag.tag='mysql';
分解后你可能需要执行这三条语句:
mysql> SELECT * FROM tag WHERE tag='mysql';
mysql> SELECT * FROM tag_post WHERE tag_id=1234;
mysql> SELECT * FROM post WHERE post.id in (123,456,567,9098,8904);
$connect1=mysql_connect($host1,$user1,$password1);
$connect2=mysql_connect($host2,$user2,$password2);
$result1=mysql_query($sql1,$connect1);
$result2=mysql_query($sql2,$connect2);
union all
select * from fed_number -- 192.1.68.1.2
比如连接1.1的MYSQL,在其中安装FEDERA存储引擎,建立FED表,上面已经有示例,
在1.1中用SQL语句查询即可,与在1.1中的表没有区别
然后连接1.1
然后执行如下SQL
select * from customer join fed_number on customer.number_id=fed_number.id是上面的意思吧
只要这样肯定行呗
1 不同库的数据,很少需要,或者尽量避免实时同时统计。
2 分库一定有规则,或按模块,或按时间,或按地域,或按ID(之hash),不太可能存在不确定哪个库的情况
3 由于规则1,加上缓存等帮助,相关统计、查询可以考虑在程序端完成,此难度取决于当初分库设计之优良与否(2)
ERP系统、一个总公司数据库、存相关信息。
分公司数据库总数不确定,有可能客户业务拓展,在各地进行开分公司,代理网点
每个分公司都有相同的表,存部分信息,总公司看到的,为选择哪个地方的分公司,自动关联相关表连接
你可能会分公司不固定,怎么判断连接。。数据库可以多备份一个字段、、
如果新加一个分库、只需要在总库表中字段添加就行。
所以group by 字段、、有多少就是多少,相当于无限
你告诉我你要在总库手动映射多少个表