暂无图片
暂无图片
2
暂无图片
暂无图片
1
暂无图片

Halo数据库MySQL模式的跨库查询

原创 JGJ 2023-09-28
12568

      在PostgreSQL数据库中,如果要跨库查询,一般的方式是先要在对应的数据库上建立一个dblink,然后在查询时定义后查询参数才能查到数据。而在MySQL数据库中,跨库查询比较简单,同服务器的跨库查询只需要在关联查询的时候带上数据名,SQL的写法是这样的 :

select * from db1.tb1 t1 join db2.tb2 t2 on t1.a1= t2.a2;
复制

      Halo数据库的MySQL模式(以下简称Halo-MySQL)也兼容了MySQL数据库的该项功能。

需求:数据库halo_mysql_test_db的表t0需要关联数据库halo_mysql_test_db1中的t1,查询需要的数据。

# Halo-MySQL DDL语句的数据库参数

postgresql_host = "127.0.0.1"

postgresql_port = 19233

postgresql_user = "halo_mysql_test_user1"

postgresql_db = "halo_mysql_test_db"

# Halo-MySQL 参数

halo_mysql_host = "127.0.0.1"

halo_mysql_port = 3307

halo_mysql_user = "halo_mysql_test_user1"

halo_mysql_password = "1234wjj"

halo_mysql_db = "halo_mysql_test_db"

在建表库上执行,

CREATE SCHEMA halo_mysql_test_db;CREATE SCHEMA halo_mysql_test_db1;SET SEARCH_PATH TO halo_mysql_test_db1, "$user", public;CREATE TABLE halo_mysql_test_db1.t1 (    id int,  ident_no VARCHAR(32) NOT NULL,    name VARCHAR(64) NOT NULL,   age INT NOT NULL,  tel_no CHAR(32),    description VARCHAR(256));
复制

图片

在Halo-MySQL库上执行:

INSERT INTO halo_mysql_test_db1.t1 VALUES(1, '202201010001', 'zhangsan1', 18, '15812345678', '');INSERT INTO halo_mysql_test_db1.t1(id, ident_no, name, age, tel_no, description) VALUES(2, '202201010002', 'zhangsan2', 18, '15812345678', '');INSERT INTO halo_mysql_test_db1.t1 VALUES(3, '202201010003', 'zhangsan3', 18, '15812345678', '');INSERT INTO halo_mysql_test_db1.t1(id, ident_no, name, age, tel_no, description) VALUES(4, '202201010004', 'zhangsan4', 18, '15812345678', '');INSERT INTO halo_mysql_test_db1.t1(id, ident_no, name, age, tel_no, description) VALUES(5, '202201010004', 'zhangsan4', 18, '15812345678', '');INSERT INTO halo_mysql_test_db1.t1(id, ident_no, name, age, tel_no, description) VALUES(6, '202201010004', 'zhangsan4', 18, '15812345678', '');INSERT INTO halo_mysql_test_db1.t1(id, ident_no, name, age, tel_no, description) VALUES(9, '202201010004', 'zhangsan4', 19, '15812345678', '');SELECT count(*) as c FROM halo_mysql_test_db1.t1;
复制

图片

在建表库上执行:

SET SEARCH_PATH TO halo_mysql_test_db, "$user", public;CREATE TABLE halo_mysql_test_db.t0 (    id int,  ident_no VARCHAR(32) NOT NULL,    name VARCHAR(64) NOT NULL,   age INT NOT NULL,  tel_no CHAR(32),    description VARCHAR(256));
复制

图片

在Halo-MySQL库上执行:

INSERT INTO t0 VALUES(1, '202201010001', 'zhangsan1', 18, '15812345678', '');INSERT INTO t0(id, ident_no, name, age, tel_no, description) VALUES(2, '202201010002', 'zhangsan2', 18, '15812345678', '');INSERT INTO halo_mysql_test_db.t0 VALUES(3, '202201010003', 'zhangsan3', 18, '15812345678', '');INSERT INTO halo_mysql_test_db.t0(id, ident_no, name, age, tel_no, description) VALUES(4, '202201010004', 'zhangsan4', 18, '15812345678', '');INSERT INTO t0(id, ident_no, name, age, tel_no, description) VALUES(5, '202201010004', 'zhangsan4', 18, '15812345678', '');INSERT INTO halo_mysql_test_db.t0(id, ident_no, name, age, tel_no, description) VALUES(6, '202201010004', 'zhangsan4', 18, '15812345678', '');SELECT count(*) as c FROM t0;SELECT count(*) as c FROM halo_mysql_test_db.t0;select * from t0;select * from t1;select * from halo_mysql_test_db1.t1;select count(*) as c FROM halo_mysql_test_db1.t1;select * from t0  join halo_mysql_test_db1.t1 t1 where t0.id =t1.id;
复制

图片

图片

      当有存量业务数据,并且存在跨库查询时,将存量业务数据导入到Halo-MySQL的时候,需要在Halo-MySQL下为原来存量业务数据在MySQL下的每个database,在Halo-MySQL上创建一个同名scheme,然后,依次为原MySQL各个database下的表,在Halo-MySQL上刚创建的同名scheme下创建表即可。

      以上就是Halo-MySQL跨库查询的全部内容。感谢阅读,祝大家双节愉快!

最后修改时间:2024-01-26 11:23:35
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

冷狼
暂无图片
1年前
评论
暂无图片 0
在PostgreSQL数据库中,如果要跨库查询,一般的方式是先要在对应的数据库上建立一个dblink,然后在查询时定义后查询参数才能查到数据。
1年前
暂无图片 点赞
评论