阅读(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'},
...])
一般来说包含三个方面信息
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
类型需要使用字符串类型表示