Amygoing
作者Amygoing联盟成员·2020-04-09 10:50
产品经理·数据库

分布式事务数据库HotDB的DNID特色语法

字数 3090阅读 1062评论 0赞 0

DNID是数据节点DATANODE_ID的缩写

在计算节点上可以使用DNID作为WHERE子句中的过滤条件,以及在SELECT语句中作为查询项;也可以在结果集中显示每行结果的DNID(数据节点)。

1,在SELECT、UPDATE、DELETE子句中,使用DNID字段
SELECT *FROM customer WHERE dnid=1;
执行该SELECT语句,计算节点将会返回分片表customer在数据节点ID为1上的数据。

DELETEFROM customer WHERE dnid=1 AND id=3;
执行该DELETE语句,计算节点将会删除分片表customer在数据节点ID为1,字段ID等于3的数据。

UPDATEcustomer SET id=4 WHERE dnid=1 AND name='a';
执行该DELETE语句,计算节点将会修改分片表customer在数据节点ID为1,字段name等于'a'的数据。

2,执行SELECT语句使用DNID作为查询项
SELECT*,dnid FROM tab_name;
执行该SELECT语句,计算节点将会在结果集里显示所有结果的dnid值,且dnid必须放在*的后面,否则会出现语法错误。

3,在结果集中显示DNID
登录到计算节点以后,执行SET SHOW_DNID=1语句,计算节点将会在SELECT语句中返回每一行结果的DNID(数据节点ID)。

[mysql](http://www.itpub.net/thread-1431442-1-1.html)>set show_dnid=1;
Query OK,0 rows affected (0.00 sec)
[mysql](http://www.itpub.net/tree/index_166/)>select * from customer where id in (77,67,52,20);
+----+---------+-------------------+--------------+----------------+------+-------------------+-----------+
| id |    name | telephone       | provinceid |    province  | city   |    address      |   DNID   |
+----+---------+-------------------+--------------+----------------+-------+------------------+------------+
| 52 | 马深圳 | 13912340052 |       7         | Guangdong| 深圳 | 某某街某某号 |     13      |
| 77 | 郝上海 | 13912340077 |       25       | Shanghai    | 上海 | 某某街某某号 |     14      |
| 20 | 许重庆 | 13912340020 |       4         |  Chongqing | 重庆 | 某某街某某号 |     12      |
| 67 | 岑南昌 | 13912340067 |       17       |     Jiangxi    | 南昌 | 某某街某某号 |     15      |
+----+---------+-------------------+--------------+----------------+-------+------------------+------------+
4 rows inset (0.00 sec)

图中结果分别显示了数据节点ID为12,13,14,15的数据行。
全局表SET SHOW_DNID=1,语句,计算节点将会在SELECT语句中返回每一行结果的DNID(GLOBAL)。

mysql>set show_dnid=1;
Query OK,0 rows affected (0.00 sec)
mysql>select * from tb_quan;
+----+----+------+-------------+
|  id |  a  |  b     |    DNID    |
+----+----+------+-------------+
|   1 |  1  | 1.10 | GLOBAL |
|   2 |  2  | 1.20 |  GLOBAL|
|   3 |  3  | 1.30 |  GLOBAL|
+----+----+------+-------------+

SET SHOW_DNID=0,将取消在结果集中显示DNID列。

mysql>set show_dnid=0;
Query OK,0 rows affected (0.00 sec)
mysql>select * from customer where id in (77,67,52,20);
+----+---------+--------------------+--------------+----------------+--------+--------------------+
|  id |name    |      telephone   | provinceid |    province   |  city   |        address    |
+----+---------+--------------------+--------------+-----------------+-------+--------------------+
| 52 | 马深圳  | 13912340052 |            7    | Guangdong | 深圳  | 某某街某某号  |
| 77 | 郝上海  | 13912340077 |           25   |    Shanghai  | 上海  | 某某街某某号  |
| 20 | 许重庆  | 13912340020 |            4    |   Chongqing | 重庆  | 某某街某某号  |
| 67 | 岑南昌  | 13912340067 |           17   |       Jiangxi   | 南昌  | 某某街某某号  |
+----+---------+--------------------+--------------+-----------------+--------+-------------------+
4 rows inset (0.00 sec)

4,DNID的限制
DNID字段为计算节点的保留字段,禁止在业务表中使用DNID字段,在SQL语句中使用DNID作为别名。
DNID只适用于SELECT,UPDATE,DELETE的简单单表语句;并且,DNID只能作为WHERE子句的过滤条件,不能在ORDER BY,GROUP BY,HAVING中使用DNID字段;同样,不支持在JOIN语句、UNION/UNION ALL、子查询中使用DNID;禁止在函数,表达式中使用DNID字段。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关问题

相关资料

X社区推广