3 回答
TA贡献1804条经验 获得超8个赞
是的,它可以在MySQL中使用。
有问类似的问题以前也。您必须使用FEDERATED ENGINE来执行此操作。这个想法是这样的:
您必须具有基于另一个远程位置的表的联合表才能使用您想要的方式。表的结构必须完全相同。
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=latin1
CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table';
TA贡献1772条经验 获得超6个赞
这是一种破解,它不是一个连接,但我使用bash函数让我觉得我在做跨服务器查询:
显式版本:
tb2lst(){
echo -n "("
tail -n +2 - | paste -sd, | tr -d "\n"
echo ")"
}
id_list=$(mysql -h'db_a.hostname' -ume -p'ass' -e "SELECT id FROM foo;" | tb2lst)
mysql -h'db_b.hostname' -ume -p'ass' -e "SELECT * FROM bar WHERE foo_id IN $id_list"
+--------|-----+
| foo_id | val |
+--------|-----+
| 1 | 3 |
| 2 | 4 |
+--------|-----+
我写了一些包装函数,我保存在我的bashrc中,所以我的观点只是一个命令:
db_b "SELECT * FROM bar WHERE foo_id IN $(db_a "SELECT id FROM foo;" | tb2lst);"
+--------|-----+
| foo_id | val |
+--------|-----+
| 1 | 3 |
| 2 | 4 |
+--------|-----+
至少对于我的用例,这将两个查询快速拼接在一起,输出等同于连接,然后我可以将输出管道输出到任何需要它的工具中。
添加回答
举报