异构数据库访问
异构数据库指与当前用户连接的数据库运行机制不同的外部数据库服务。例如,用户通过应用程序访问 KaiwuDB 服务实例。此时,在另外的服务器上运行的数据库服务,就是当前 KaiwuDB 服务的异构数据库。KaiwuDB 支持用户连接到 KaiwuDB 服务时,通过异构数据库链接访问异构数据库。在 KaiwuDB 中,异构数据库链接代表异构数据库。目前,KaiwuDB 只支持对异构数据库进行 SELECT
、INSERT
、DELETE
、UPDATE
操作。
说明
目前,KaiwuDB 主要支持 MySQL 5.7 和 MySQL 8.0 作为异构数据库。
创建异构数据库链接
CREATE LINK
语句用于创建异构数据库链接。
说明
创建后,KaiwuDB 不支持修改异构数据库链接。
所需权限
任意用户均可以创建异构数据库链接。
语法格式
参数说明
参数 | 说明 |
---|---|
link_name | 待创建的异构数据库链接的名称。该名称必须唯一。 |
service_name | 建立连接的数据库服务的名称。目前,KaiwuDB 主要支持 MySQL 5.7 和 MySQL 8.0 作为异构数据库。 |
db_address | 待访问的异构数据库的地址,包括 IP 地址和端口号。 |
db_name | 待访问的异构数据库的名称。 |
user_name | 连接异构数据库使用的用户名。 |
password | 连接异构数据库使用的密码。 |
语法示例
以下示例创建一个异构数据库链接,允许 user1
用户使用密码访问 IP 地址为 127.0.0.1:2345
的 test
数据库。
CREATE LINK link1 (SERVICE "mysql", ADDR "127.0.0.1:2345", DBNAME "test", USER "user1", PASSWORD "your_password");
CREATE LINK
向异构数据库写入数据
REMOTE INSERT INTO
语句用于向异构数据库的目标表中插入一行或多行数据,也支持使用 SELECT
子句将其他远程表的查询结果批量写入到指定目标表。写入数据的 SQL 语句的语法必须符合 MySQL 数据库的语法规范。
说明
向异构数据库写入数据时,确保建立异构数据库链接的用户存在,且该用户对异构数据库中的目标表具有 INSERT
权限,否则系统报错。
所需权限
- 非三权分立模式下,用户是
admin
角色的成员或着是拥有目标表的INSERT
权限和远程表的SELECT
权限的普通用户。默认情况下,root
用户属于admin
角色。 - 三权分立模式下,用户是
sysadmin
、secadmin
、auditadmin
角色的成员或着是拥有目标表的INSERT
权限和远程表的SELECT
权限的普通用户。默认情况下,sysroot
、secroot
、auditroot
用户分别属于sysadmin
、secadmin
、auditadmin
角色。
语法格式
参数说明
参数 | 说明 |
---|---|
table_name | 待写入数据的远程表的名称,采用 <table_name>@<link_name> 格式。该表必须存在于异构数据库中。说明 - 不支持在表名前添加前缀。 - 表的别名不支持使用 @ 符号。 |
link_name | 异构数据库链接的名称。 说明 不支持使用括号将异构数据库链接的名称括起来。 |
column_name | 可选参数。待写入的远程表的列名。支持指定一个或多个列名,列名之间使用逗号(, )隔开。如未指定列名,将向表中所有的列写入数据。 |
column_value | 待写入的远程表的列值。支持指定一个或多个列值,列值之间使用逗号(, )隔开。列值必须与列名一一对应。 |
expr | SELECT 表达式。SELECT 语句返回的列数必须与 REMOTE INSERT INTO 语句中要插入的列数一致。 |
where_clause | WHERE 子句用于指定过滤条件,筛选出符合条件的行。 |
语法示例
写入单行数据
REMOTE INSERT INTO users@test (id) VALUES (1);
写入多行数据
REMOTE INSERT INTO users@test (id, name) VALUES (2, 'Andy');
使用 SELECT 子句批量写入数据
REMOTE INSERT INTO users@test (id, name) SELECT id, name FROM user2@test WHERE id > 2;
更新异构数据库中的数据
REMOTE UPDATE
语句用于更新异构数据库中的数据。更新数据的 SQL 语句的语法必须符合 MySQL 数据库的语法规范。
说明
更新异构数据库中的数据时,确保建立异构数据库链接的用户存在,且该用户对异构数据库中的目标表具有 UPDATE
权限,否则系统报错。
所需权限
- 非三权分立模式下,用户是
admin
角色的成员或着是拥有目标表的UPDATE
权限的普通用户。默认情况下,root
用户属于admin
角色。 - 三权分立模式下,用户是
sysadmin
、secadmin
、auditadmin
角色的成员或着是拥有目标表的UPDATE
权限的普通用户。默认情况下,sysroot
、secroot
、auditroot
用户分别属于sysadmin
、secadmin
、auditadmin
角色。
语法格式
参数说明
参数 | 说明 |
---|---|
table_name | 待更新数据的远程表的名称,采用 <table_name>@<link_name> 格式。该表必须存在于异构数据库中。说明 - 不支持在表名前添加前缀。 - 表的别名不支持使用 @ 符号。 |
link_name | 异构数据库链接的名称。 说明 不支持使用括号将异构数据库链接的名称括起来。 |
column_name | 待更新的远程表的列名。 |
column_value | 新的列值,用于替换旧的列值。列值必须与列名一一对应。 |
where_clause | 可选参数。WHERE 子句用于指定更新的行。格式为 WHERE <column> <operator> <value> ,其中 <operator> 支持条件运算符(例如 = 、!= 、< 、<= 、> 、>= 等)、逻辑运算符(例如 AND 、OR 、NOT )以及通配符(例如 % )。 |
order_by_clause | 可选参数。ORDER BY 子句可以按照一个或多个列的值对结果集进行排序,可以指定 ASC (升序,默认)或 DESC (降序)关键字来控制排序顺序。 |
limit_count | 可选参数。LIMIT 子句指定返回结果的最大行数。 |
语法示例
REMOTE UPDATE users@test SET id =1 WHERE name = 'abc';
查询异构数据库中的数据
REMOTE SELECT
语句用于查询异构数据库中的数据。目前,支持简单查询、排序、分组、过滤、聚合查询、关联查询等。查询数据的 SQL 语句的语法必须符合 MySQL 数据库的语法规范。
说明
- 查询异构数据库中的数据时,确保建立异构数据库链接的用户存在,且该用户对异构数据库中的目标表具有
SELECT
权限,否则系统报错。 - 不支持同时运行多个 SQL 查询语句,不支持嵌套查询和 UNION 查询,不支持 SQL 语句中出现反引号。
- 单个 SQL 语句中,不支持远程表和本地表、不同异构数据库的远程表之间的混合使用。
- 不支持
PREPARE
语句。不支持设置、引用用户自定义变量,不支持存储过程。
所需权限
- 非三权分立模式下,用户是
admin
角色的成员或着是拥有目标表的SELECT
权限的普通用户。默认情况下,root
用户属于admin
角色。 - 三权分立模式下,用户是
sysadmin
、secadmin
、auditadmin
角色的成员或着是拥有目标表的SELECT
权限的普通用户。默认情况下,sysroot
、secroot
、auditroot
用户分别属于sysadmin
、secadmin
、auditadmin
角色。
语法格式
参数说明
参数 | 说明 |
---|---|
expr | SELECT 表达式。 |
table_name | 待查询数据的远程表的名称,采用 <table_name>@<link_name> 格式。该表必须存在于异构数据库中。说明 - 不支持在表名前添加前缀。 - 表的别名不支持使用 @ 符号。 |
link_name | 异构数据库链接的名称。 说明 不支持使用括号将异构数据库链接的名称括起来。 |
join_condition | 可选参数。连接条件。 |
where_clause | 可选参数。WHERE 子句用于指定查询的行。格式为 WHERE <column> <operator> <value> ,其中 <operator> 支持条件运算符(例如 = 、!= 、< 、<= 、> 、>= 等)、逻辑运算符(例如 AND 、OR 、NOT )以及通配符(例如 % )。 |
group_expr | GROUP BY 子句根据表达式将数据集划分成小组,然后对这些小组进行数据处理。聚合查询与 GROUP BY 连用时,应避免 GROUP BY 后的结果集行数过大。 |
having_condition | 当 WHERE 关键字无法与聚合函数一起使用时,HAVING 子句可以用来筛选分组后的各组数据。HAVING 子句的作用类似于 WHERE 子句,但适用于聚合函数。 |
order_by_clause | 可选参数。ORDER BY 子句可以按照一个或多个列的值对结果集进行排序,可以指定 ASC (升序,默认)或 DESC (降序)关键字来控制排序顺序。 |
limit_count | 可选参数。LIMIT 子句指定返回结果的最大行数。 |
offset_value | 可选参数。OFFSET 子句用于跳过前面的偏移量行数。OFFSET 子句通常与 LIMIT 组合使用,通过限制结果的数量,实现分页显示结果,避免一次性检索所有数据。 |
语法示例
REMOTE SELECT o.order_id, c.name FROM orders@test AS o JOIN customers@test AS c ON o.customer_id = c.id WHERE o.status = 'completed';
删除异构数据库中的数据
REMOTE DELETE FROM
语句用于删除异构数据库中的数据。删除数据的 SQL 语句的语法必须符合 MySQL 数据库的语法规范。
说明
删除异构数据库中的数据时,确保建立异构数据库链接的用户存在,且该用户对异构数据库中的目标表具有 DELETE
权限,否则系统报错。
所需权限
- 非三权分立模式下,用户是
admin
角色的成员或着是拥有目标表的DELETE
权限的普通用户。默认情况下,root
用户属于admin
角色。 - 三权分立模式下,用户是
sysadmin
、secadmin
、auditadmin
角色的成员或着是拥有目标表的DELETE
权限的普通用户。默认情况下,sysroot
、secroot
、auditroot
用户分别属于sysadmin
、secadmin
、auditadmin
角色。
语法格式
参数说明
参数 | 说明 |
---|---|
table_name | 待删除数据的远程表的名称,采用 <table_name>@<link_name> 格式。该表必须存在于异构数据库中。说明 - 不支持在表名前添加前缀。 - 表的别名不支持使用 @ 符号。 |
link_name | 异构数据库链接的名称。 说明 不支持使用括号将异构数据库链接的名称括起来。 |
where_clause | 可选参数。WHERE 子句用于指定删除的行。格式为 WHERE <column> <operator> <value> ,其中 <operator> 支持条件运算符(例如 = 、!= 、< 、<= 、> 、>= 等)、逻辑运算符(例如 AND 、OR 、NOT )以及通配符(例如 % )。 |
order_by_clause | 可选参数。ORDER BY 子句可以按照一个或多个列的值对结果集进行排序,可以指定 ASC (升序,默认)或 DESC (降序)关键字来控制排序顺序。 |
limit_count | 可选参数。LIMIT 子句指定返回结果的最大行数。 |
语法示例
REMOTE DELETE FROM users@test WHERE id =1;
删除异构数据库链接
DROP LINK
语句用于删除异构数据库链接。
所需权限
- 非三权分立模式下:具有
admin
角色的用户可以删除所有异构数据库链接。普通用户只能删除自己创建的异构数据库链接。 - 三权分立模式下:具有
sysadmin
、secadmin
、auditadmin
角色的用户可以删除所有异构数据库链接。普通用户只能删除自己创建的异构数据库链接。
语法格式
参数说明
参数 | 说明 |
---|---|
link_name | 待删除的异构数据库链接的名称。 |
语法示例
以下示例删除 link1
异构数据库链接。
DROP LINK link1;
DROP LINK