Mycat2 Sql兼容性 简介
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'},
...])
一般来说包含三个方面信息
Mycat接收到的sql- 下推的关系表达式以及最终执行的
sql模板 - 一个或多个存储节点的信息
不支持的SQL高级功能
- 不支持
UDF - 不支持自定义数据类型
- 不支持外键
- 不支持
Mycat运算的逻辑视图 - 不支持游标
- 不支持触发器
- 不支持
Mycat运算的存储过程 - 不支持流程控制语句
不支持的DML
- 不支持一条
SQL多表插入,删除,更新 - 不支持子查询内使用
for update - 语法顶层的
for update语句在非读写分离的功能上(即涉及分布式查询)会把涉及的每个存储节点的sql加上for update - 插入,删除,更新
SQL中使用子查询不能运算跨分片的数据 - 不支持
STRAIGHT_JOIN和NATURAL JOIN - 不支持
MySQL注解 - 不支持跨分片删除,更新使用
order by/limit语法 - 不支持
INSERT INTO ... SELECT ... FROM语法 - 不支持
loaddata - 不支持跨分片
UPDATE DELETE有JOIN语法 - 不支持
SELECT INTO OUTFILE/INTO DUMPFILE/INTO - 兼容支持
SQL中对变量读写,但是没有副作用
不支持的DDL
- 所有
DDL都不支持多表操作,只支持单表操作 - 所有
DDL都不支持多库操作,只支持单库操作
不支持函数
- 不支持
GTID函数 - 不支持全文检索函数
- 不支持企业加密函数
- 不支持
row_count函数
不支持的数据类型
- 不支持空间数据类型
JSON,XML类型需要使用字符串类型表示