MySQL testdb create table fbs2 ( a int, b int, c char(20), primary key (a,b) ) shardkey=a;
Query OK, 0 rows affected (0.09 sec)
b、广播表的创建
简述:支持建小表(广播表) , 此时该表在所有set中都是全部数据,这个主要方用于跨set的join操作 , 同时通过分布式事务保证修改操作的原子性,使得所有set的数据是完全一致的。
**语句:**
MySQL testdb create table gbb(a int,b int key) **shardkey=noshardkey_allset;**
Query OK, 0 rows affected (0.03 sec)
c、传统普通表
简述:支持建立普通的表,语法和传统mysql完全一样 , 此时该表的数据全量存在第一个set节点中,所有该类型的表都放在第一个set中 。
MySQL testdb create table ptb(a int ,b varchar(10));
Query OK, 0 rows affected (0.03 sec)
注意事项:
1、在分布式实例中,分布式表shardkey对应后端数据库的分区字段,因此必须是主键以及所有唯一索引的一部分 , 否则可能无法完成建表操作 。
2、分布式表shardkey字段的值不包含中文, 否则proxy会转换字符集可能会出错 。另外SQL语法上如:shardkey=a 一般放在SQL语句最后来写 。
3、TDSQL分布式实例表的数据操作
为了更好的发挥分布式架构的优势,在进行SQL操作时和传统数据库还是有部分差异 。接下来我们从数据库的插入,更新,删除方面分别来看有哪些注意事项 。
======INSERT插入操作=======
**插入语句1:**
MySQL testdb insert into fbs(a,b) values(10,1000);
Query OK, 1 row affected (0.00 sec)
**插入语句2:**
MySQL testdb insert into fbs values(1,10,1000);
或
MySQL testdb insert into test1 (b,c) values(100,"record3");
ERROR 810 (HY000): Proxy ERROR:sql is too complex,need to send to only noshard table.Shard table insert must has field spec
注意:语句2报错的原因insert时字段需要包含shardkey,否则会拒绝执行该sql , 因为Proxy不知道该sql发往哪个后端分片节点 。
=====UPDATE、DELETE更新、删除操作=====
更新语句1:
MySQL testdb update fbs set b=2000 where a=10;
Query OK, 1 row affected (0.00 sec)
更新语句2:
MySQL testdb update fbs set b=2000 ;
ERROR 658 (HY000): Proxy ERROR: Join internal error: update query has no where clause
删除操作:
MySQL testdb delete from fbs;
ERROR 913 (HY000): Proxy ERROR:Join internal error: delete query has no where clause
注意事项:
1、出于数据操作安全上和减少人为误操作导致数据丢失情况的出现,TDSQL禁止update 无 where 条件的更新动作 。
2、同样的delete操作无where条件也会被禁止执行,如果确认要删除表数据或表,建议备份后用truncate或drop方式操作 。
3、同样的update操作时尽量避免更新shardkey字段,因为影响Proxy中的路由更新,会导致错误 。
1、TDSQL透传功能介绍
对于分布式实例,会对SQL进行语法解析,有一定的限制 , 如果用户想在某个set中获取单个节点数据 , 或在指定节点执行SQL,可以使用TDSQL的透传SQL的功能 。
使用透传功能,我们需要重新连接登录TDSQL分布式实例时指定 **- c选项** 。普通登录方式 , 不支持指定节点执行SQL的透传功能 。
登录如下:
mysql -h172.21.32.13 (proxy地址) -utest -P3306 -p -c(透传必须指定-c)
2、TDSQL透传操作演示
首先我们重新登陆TDSQL分布式实例:mysql -h172.21.32.13 -utest -P3306 -p -c
仍旧切换使用testdb数据库 。
a、查看分布式实例set节点
使用/*proxy*/show status 查看当前的TDSQL分布式实例的节点信息,共有两个set ,分别为set_1605181898_1、set_1605181972_3
推荐阅读
- 发微信视频号怎么删除,怎么删除微信视频号发的视频
- 财富精算师小程序怎么注册的简单介绍
- 如何做新媒体布局创意案例,新媒体创新案例
- 网站制作视频教程下载,网站制作视频教程下载免费
- java中文写代码 java在哪儿写代码
- 华为手机商城质量怎么杨,华为商城的商品怎么样
- js字符串substr,js字符串substring
- 象棋直播走棋教程,象棋走棋步骤
- python递归函数分解 python递归函数基例