不支持的特性和使用限制
更新時間 2023-12-27 11:41:12
最近更新時間: 2023-12-27 11:41:12
分享文章
本文主要介紹DRDS不支持的特性和使用時的限制。
SQL限制
SQL大類限制
- 不支持用戶自定義數據類型、自定義函數。
- 不支持視圖、存儲過程、觸發器、游標。
- 不支持BEGIN…END、LOOP…END LOOP、REPEAT…UNTIL…END REPEAT、WHILE…DO…END WHILE等復合語句。
- 不支類似IF,WHILE等流程控制類語句。
- 不支持SAVEPOINT操作。
- 不支持SQL里帶schema操作。
小語法限制
DDL
- 不支持CREATE TABLE tbl_name LIKE old_tbl_name。
- 不支持CREATE TABLE tbl_name SELECT statement。
DML
- 不支持update分片鍵的值。
- 不支持SELECT INTO OUTFILE/INTO DUMPFILE/INTO var_name。
- 不支持INSERT DELAYED Syntax。
- 不支持非WHERE條件的Correlate Subquery。
- 不支持SQL中帶聚合條件的Correlate Subquery。
- 不支持Global的變更,比如SET GLOBAL var=xx 或者SET @@global.var=xx。
- 不支持SQL中對于變量的引用和操作,比如SET @c=1, @d=@c+1; SELECT @c, @d。
數據庫管理
- SHOW WARNINGS Syntax不支持LIMIT/COUNT的組合。
- SHOW ERRORS Syntax不支持LIMIT/COUNT的組合。
SQL語句限制
union約束
- 使用union關鍵字的sql,要求其中涉及的分片表的分片規則及配置參數一致,使用union all關鍵字的sql則無此要求。
- 分片表不支持union/union all與聚合函數、limit、groupby、having、orderby等關鍵字聯用。
- 不支持分片表和全局表union。
JDBC約束
- 不支持rewriteBatchedStatements=true參數設置(默認為false)。
- 不支持useServerPrepStmts=true參數設置(默認為false)。
- BLOB, BINARY, VARBINARY字段不能使用setBlob()或setBinaryStream()方法設置參數。
庫內分表約束
SQL中union/union all關鍵字使用的注意事項
- 不支持包含InnerTable的union運算,比如兩個InnerTable,InnerTable與分片表,InnerTable與全局表。
- 不支持包含InnerTable的union/union all與聚合函數、limit、groupby、having、orderby等關鍵字運算。
- 當分組屬性中參數:isPermitComplexInnerTableSql=“true”時,允許union、union all中使用兩個及兩個以上的庫內分表,反之禁止。
聚合函數
- 不支持在包含InnerTable的sql中使用包含聚合函數及運算的的表達式(諸如count(*)+' ')。
having關鍵字的使用注意事項
- having條件中不支持“and”或“or”連接的多個表達式。
- having條件中請在表達式左側使用字段或別名,右側使用過濾值。
- having條件中請使用字段或函數的別名,請勿使用函數本身。
- 主SQL語句的having中不支持subquery,只能處理常量;子查詢語句的having中支持subquery。
子查詢
- 不支持包含InnerTable的子查詢語句中“*”關鍵字和聚合函數一起使用。
- 不支持子查詢中InnerTable的數量大于1。
- 不支持包含InnerTable的子查詢中使用包含聚合函數及運算的的表達式(諸如count(*)+' ')。
- 不支持包含InnerTable的子查詢中使用union/union all。
- 不支持delete、update語句中使用包含InnerTable的子查詢。
- 不支持delete、update語句包含InnerTable在內的多表操作。