MyCat不支援的SQL語句總結

chenfeng發表於2017-06-13
已知的MyCat不支援的SQL語句型別如下:


SELECT:
跨分片(實體庫)的交叉查詢
跨節點的聯合查詢 (如使用者庫的表和平臺庫的表做聯合查詢)
INSERT:
插入的欄位不包含分片欄位 (如插入tbl_user_base_info表,沒有提供user_id列)
插入的分片欄位找不到對應分片
複製插入Insert into…select… 
多行插入insert into tab_a(c1,c2) values(v1,v2),(v11,v21)… 
UPDATE:
更新的列包含分片列
多表更新update a, b set a.nation=’China’, b.pwd=’123456’ where a.id=b.id 
複雜更新update a, b set a.nation=’China’ where a.id=b.id; 但支援子查詢方式update a set a.nation=’China’ where id in (select id from b);
DELETE:
複雜刪除 delete a from a join b on a.id=b.id;  支援子查詢方式delete from a where a.id in (select id from b), 但表不能起別名
其它:
Call procedure()   MyCat未支援儲存過程定義, 因而不允許呼叫儲存過程,但可透過註解來呼叫各個分片上的儲存過程
Selectfunc(); 不支援這種方式直接呼叫自定義函式,但支援select id, func() from employee 只需employee所在的所有分片上存在這個函式。MySql自帶函式可隨意使用。


注意事項:
Order by欄位必須出現在select中(MyCat先將結果取出,然後排序)
Group by務必使用標準語法select count(1),type from tab_a group by type;
MyCat的一些自帶函式sum,min,max等可以正確使用,但多分片執行的avg有bug,執行的結果是錯誤的
謹慎使用子查詢,外層查詢沒有分片查詢條件,則會在所有分片上執行(子查詢內外層的表一樣較為特殊)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2140678/,如需轉載,請註明出處,否則將追究法律責任。

相關文章