学堂 学堂 学堂公众号手机端

MyCat不支持的SQL语句

lewis 6年前 (2020-01-22) 阅读数 7 #技术


已知的MyCat不支持的SQL语句类型如下(不完全统计,后续会更新):


SELECT:

Ø跨分片(实体库)的交叉查询

Ø跨节点的联合查询(如用户库的表和平台库的表做联合查询)

INSERT:

Ø插入的字段不包含分片字段(如插入tbl_user_base_info表,没有提供user_id列)

Ø插入的分片字段找不到对应分片

Ø复制插入Insertinto…select…

Ø多行插入insertintotab_a(c1,c2)values(v1,v2),(v11,v21)…

UPDATE:

Ø更新的列包含分片列

Ø多表更新updatea,bseta.nation=’China’,b.pwd=’123456’wherea.id=b.id

Ø复杂更新updatea,bseta.nation=’China’wherea.id=b.id;但支持子查询方式updateaseta.nation=’China’whereidin(selectidfromb);

DELETE:

Ø复杂删除deleteafromajoinbona.id=b.id;支持子查询方式

其它:

ØCallprocedure()MyCat未支持存储过程定义,因而不允许调用存储过程,但可通过注解来调用各个分片上的存储过程

ØSelectfunc();不支持这种方式直接调用自定义函数,但支持selectid,func()fromemployee只需employee所在的所有分片上存在这个函数。MySql自带函数可随意使用。

注意事项:

ØOrderby字段必须出现在select中(MyCat先将结果取出,然后排序)

ØGroupby务必使用标准语法selectcount(1),typefromtab_agroupbytype;

ØMyCat的一些自带函数sum,min,max等可以正确使用,但多分片执行的avg有bug,执行的结果是错误的

Ø谨慎使用子查询,外层查询没有分片查询条件,则会在所有分片上执行(子查询内外层的表一样较为特殊)

版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门