阅读(4193) (14)

Mycat2 Sql兼容性 简介

2021-09-08 11:36:47 更新

Mycat虽然使用MySQL网络通信协议实现与客户端的通信,但是SQL执行引擎实现技术与MySQL完全不相同.而且Mycat后端数据存储节点也未必是MySQL数据库,所以会有一些限制。

Explain语句

Mycat2支持Explain语句,仅支持select,delete,insert,update语句。 其他语法也一定程度上支持explain语句,但是不在实现目标之内,可能存在不能运行的情况。 语法

explain statement

结果

plan
sql:
SELECT *
FROM db1.`travelrecord`
rel:
View(
relNode=[SELECT *
FROM `db1`.`travelrecord`], 
distribution=[
{targetName='c0', schemaName='db1_0',tableName='travelrecord_0'},
{targetName='c0', schemaName='db1_0',tableName='travelrecord_1'},
...])

一般来说包含三个方面信息

  1. Mycat接收到的sql
  2. 下推的关系表达式以及最终执行的sql模板
  3. 一个或多个存储节点的信息

不支持的SQL高级功能

  1. 不支持UDF
  2. 不支持自定义数据类型
  3. 不支持外键
  4. 不支持Mycat运算的逻辑视图
  5. 不支持游标
  6. 不支持触发器
  7. 不支持Mycat运算的存储过程
  8. 不支持流程控制语句

不支持的DML

  1. 不支持一条SQL多表插入,删除,更新
  2. 不支持子查询内使用for update
  3. 语法顶层的for update语句在非读写分离的功能上(即涉及分布式查询)会把涉及的每个存储节点的sql加上for update
  4. 插入,删除,更新SQL中使用子查询不能运算跨分片的数据
  5. 不支持 STRAIGHT_JOINNATURAL JOIN
  6. 不支持MySQL注解
  7. 不支持跨分片删除,更新使用order by/limit语法
  8. 不支持INSERT INTO ... SELECT ... FROM语法
  9. 不支持loaddata
  10. 不支持跨分片UPDATE DELETE有JOIN语法
  11. 不支持SELECT INTO OUTFILE/INTO DUMPFILE/INTO
  12. 兼容支持SQL中对变量读写,但是没有副作用

不支持的DDL

  1. 所有DDL都不支持多表操作,只支持单表操作
  2. 所有DDL都不支持多库操作,只支持单库操作

不支持函数

  1. 不支持GTID函数
  2. 不支持全文检索函数
  3. 不支持企业加密函数
  4. 不支持row_count函数

不支持的数据类型

  1. 不支持空间数据类型
  2. JSON,XML类型需要使用字符串类型表示