NID是数据节点DATANODE_ID的缩写
在计算节点上可以使用DNID作为WHERE子句中的过滤条件,以及在SELECT语句中作为查询项;也可以在结果集中显示每行结果的DNID(数据节点)。
- 在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’的数据。
- 执行SELECT语句使用DNID作为查询项
SELECT*,dnid FROM tab_name;
执行该SELECT语句,计算节点将会在结果集里显示所有结果的dnid值,且dnid必须放在*的后面,否则会出现语法错误。
- 在结果集中显示DNID
登录到计算节点以后,执行SET SHOW_DNID=1语句,计算节点将会在SELECT语句中返回每一行结果的DNID(数据节点ID)。
mysql>set show_dnid=1;
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 | 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)
- DNID的限制
DNID字段为计算节点的保留字段,禁止在业务表中使用DNID字段,在SQL语句中使用DNID作为别名。
DNID只适用于SELECT,UPDATE,DELETE的简单单表语句;并且,DNID只能作为WHERE子句的过滤条件,不能在ORDER BY,GROUP BY,HAVING中使用DNID字段;同样,不支持在JOIN语句、UNION/UNION ALL、子查询中使用DNID;禁止在函数,表达式中使用DNID字段。