ITPub博客

首页 > 数据库 > 数据库开发技术 > Halo数据库MySQL模式的跨库查询

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

原创 数据库开发技术 作者:Jet_Zhang 时间:2023-01-23 21:21:00 0 删除 编辑

      在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跨库查询的全部内容。感谢阅读,祝您新春愉快!


原文作者:Halo Tech;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
中国南方Oracle用户组(SOUG)联合创始人,Oracle ACE,曾服务于国外某大型银行,曾担任国内某中型保险公司的技术经理,现为易景科技合伙人、首席架构师、CTO。主要研究方向数据库内核。

注册时间:2024-06-26

  • 博文量
    124
  • 访问量
    542478