DRDS SQL支持範圍__產品簡介_分布式關係型數據庫 DRDS-阿裏雲
DRDS支持絕大部分MySQL語法和協議,包括類似SHOW DATABASES, SHOW TABLES, 以及各種DML語句包括SELECT,UPDATE,INSERT,REPLACE, DELETE,UNION等,以及有限的DRDS自定義控製命令. 總體來說,DRDS在常規的DML SQL使用幾乎沒有限製,但從性能考慮,我們會有一些針對分布式係統的特殊優化方式,如小表複製,如分布式索引,請參閱我們的最佳使用場景.
SQL大類的限製與約束:
- 暫不支持用戶自定義數據類型、自定義函數
- 暫不支持視圖、存儲過程、觸發器、遊標
- 暫不支持類似 BEGIN…END,LOOP…END LOOP,REPEAT…UNTIL…END REPEAT,WHILE…DO…END WHILE 等的複合語句
- 暫不支類似 IF,WHILE 等流程控製類語句
- 全麵的DML支持,有限的DDL支持,有限的控製指令支持
下麵羅列了目前DRDS支持的SQL語法列表,以mysql的語法列表為藍本,下麵列出的語法代表為已支持,如有特殊說明,代表部分不支持的CASE.
數據庫登陸協議
經過測試的客戶端: Workbench , Navicat, SQLyog等
數據庫DDL語法
- CREATE TABLE Syntax
- create table tbl_name like old_tbl_name / create table tbl_name select_statement 暫不支持拆分表
- CREATE INDEX Syntax
- DROP TABLE Syntax
- DROP INDEX Syntax
- ALTER TABLE Syntax
- TRUNCATE TABLE Syntax
數據庫DML語法
- INSERT Syntax
- INSERT DELAYED Syntax 暫不支持
- REPLACE Syntax
- UPDATE Syntax
- DELETE Syntax
- Subquery Syntax
- SELECT Syntax
- SELECT INTO OUTFILE/INTO DUMPFILE/INTO var_name 暫不支持
- JOIN/UNION Syntax 均支持
- 跨分庫函數支持見下表.
不支持的語法:
- 受限於分布式事務
- 跨分片操作, UPDATE/DELETE [ORDER BY] LIMIT
- 跨分片操作, UPDATE A,B set A.s = B.s+1 WHERE A.ID = B.NAME , 非拆分字段之間的跨庫JOIN
- 拆分鍵變更, UPDATE A SET A.ID = 1 WHERE XXX, ID為拆分字段
- 跨分片操作, INSERT A SELECT B WHERE B.ID > XX , 跨庫導入導出數據
- 跨庫事物, 比如兩次UPDATE不在一個分片上
- 子查詢限製
- 暫不支持非where條件的correlate subquery
- 暫不支持sql中帶聚合條件和correlate subquery
例1: 父查詢的select列上存在關聯子查詢,引用了父查詢的a.user_id
select a.user_id , (select sum(score) from b where b.user_id = a.user_id) from a order by a.user_id desc limit 10
例2: 父查詢存在count聚合函數,where條件存在exists的關聯子查詢引用了a.user_id
select count(*) from a where exists (select * from b where b.user_id = a.user_id and b.score < 60)
數據庫事務語法
- START TRANSACTION, COMMIT, and ROLLBACK Syntax
- 暫不支持transaction_characteristic定義
- 暫不支持savepoint嵌套事務的相關語法
- 暫不支持XA事務的相關語法
- 兼容set autocommit=0/false/off 等多種寫法.
- SET TRANSACTION Syntax
- 暫不支持對global的事務隔離級別進行調整
數據庫prepare語法
限製: prepare協議不可與SQL多語句一起混用
數據庫管理語法
- SET Syntax
- 目前不支持global的變更,比如
SET GLOBAL var=xx
或者set @@global.var=xx
- 目前不支持SQL中對於變量的引用和操作,比如
set @c=1, @d=@c+1; select @c, @d
- 目前不支持global的變更,比如
- Show Syntax
- SHOW COLUMNS Syntax
- SHOW CREATE TABLE Syntax
- SHOW INDEX
- SHOW TABLES Syntax
- SHOW TABLE STATUS Syntax
- SHOW TABLE STATUS Syntax
- SHOW TABLES Syntax
- SHOW VARIABLES Syntax
- SHOW WARNINGS Syntax 不支持limit/count的組合
- SHOW ERRORS Syntax 不支持limit/count的組合
- 其餘的show指令會默認下發到DB處理,結果數據沒有進行分庫數據合並
- KILL Syntax
- 目前隻支持KILL QUERY processlist_id
數據庫工具命令
DRDS自定義指令
- SHOW SEQUENCES / CREATE SEQUENCE / ALTER SEQUENCE / DROP SEQUENCE 【全局sequence管理】
- SHOW PARTITIONS FROM TABLE 【查詢表的拆分字段】
- SHOW TOPOLOGY FROM TABLE 【查詢表的物理拓撲】
- SHOW BRAODCASTS 【查詢所有廣播表】
- SHOW RULE [FROM TABLE] 【查詢表拆分定義】
- SHOW DATASOURCES 【查詢後端DB鏈接池定義】
- SHOW DBLOCK / RELEASE DBLOCK 【分布式LOCK定義】
- SHOW NODE 【查詢讀寫庫流量】
- SHOW SLOW 【查詢慢SQL列表】
- SHOW PHYSICAL_SLOW 【查詢物理DB執行慢SQL列表】
- TRACE SQL_STATEMENT / SHOW TRACE 【跟蹤SQL執行,profile整個執行過程】
- EXPLAIN [DETAIL/EXECUTE] SQL_STATEMENT 【分析DRDS執行計劃和物理DB上的執行計劃】
- RELOAD USERS 【同步DRDS控製台用戶信息到DRDS SERVER】
- RELOAD SCHEMA 【清理DRDS對應DB庫數據緩存,比如SQL解析/語法樹/表結構緩存】
- RELOAD DATASOURCES 【重建後端與所有DB的鏈接池】
數據庫係統函數
整體函數分為解析和執行部分
- 函數解析: 主要指解析純SQL中的函數定義,如果函數可以被正常解析,意味著如果用戶SQL中帶著了拆分字段,函數都可以下發到MySQL上進行執行
- 函數執行: 主要指用戶SQL不能完全下推到MySQL得到結果的情況,需要DRDS層進行二次計算時的函數支持列表.
一個例子理解:
1. select count(*) from users where user_id = 1; # user_id為切分條件, count(*)函數主要就是一個SQL解析然後發給MySQL執行,這一類的行為就取決於DRDS的函數解析的支持能力.
2. select count(*) from users; # 用戶SQL未帶切分條件, DRDS會對每個分片返回的count結果,在DRDS層麵重新計算出一個全局的count(*)結果返回給用戶,這一類的行為就取決於DRDS的函數執行的支持能力.
支持範圍:
- 函數解析支持範圍: MySQL全函數解析
- 函數執行支持範圍: 實現絕大部分的常用函數,總計約280+函數,覆蓋了MySQL所有函數的近70%+
操作符函數
function | description |
---|---|
AND, && | Logical AND |
= | Assign a value (as part of a SET statement, or as part of the SET clause in an UPDATE statement) |
BETWEEN … AND … | Check whether a value is within a range of values |
BINARY | Cast a string to a binary string |
& | Bitwise AND |
~ | Bitwise inversion |
^ | Bitwise XOR |
DIV | Integer division |
/ | Division operator |
<=> | NULL-safe equal to operator |
= | Equal operator |
>= | Greater than or equal operator |
> | Greater than operator |
IS NOT NULL | NOT NULL value test |
IS NOT | Test a value against a boolean |
IS NULL | NULL value test |
IS | Test a value against a boolean |
<< |
Left shift |
<= |
Less than or equal operator |
< |
Less than operator |
LIKE | Simple pattern matching |
- | Minus operator |
%, MOD | Modulo operator |
NOT BETWEEN … AND … | Check whether a value is not within a range of values |
!=, <> | Not equal operator |
NOT LIKE | Negation of simple pattern matching |
NOT REGEXP | Negation of REGEXP |
NOT, ! | Negates value |
OR | Logical OR |
+ | Addition operator |
REGEXP | Pattern matching using regular expressions |
>> | Right shift |
RLIKE | Synonym for REGEXP |
* | Multiplication operator |
- | Change the sign of the argument |
XOR | Logical XOR |
Coalesce | Return the first non-NULL argument |
GREATEST | Return the largest argument |
LEAST | Return the smallest argument |
STRCMP | Compare two strings |
流程控製函數
function | description |
---|---|
CASE | Case operator |
IF() | If/else construct |
IFNULL() | Null if/else construct |
NULLIF() | Return NULL if expr1 = expr2 |
字符串函數
function | description |
---|---|
ASCII() | Return numeric value of left-most character |
BIN() | Return a string containing binary representation of a number |
BIT_LENGTH() | Return length of argument in bits |
CHAR_LENGTH() | Return number of characters in argument |
CHAR() | Return the character for each integer passed |
CHARACTER_LENGTH() | Synonym for CHAR_LENGTH() |
CONCAT_WS() | Return concatenate with separator |
CONCAT() | Return concatenated string |
ELT() | Return string at index number |
EXPORT_SET() | Return a string such that for every bit set in the value bits, you get an on string and for every unset bit, you get an off string |
FIELD() | Return the index (position) of the first argument in the subsequent arguments |
FIND_IN_SET() | Return the index position of the first argument within the second argument |
FORMAT() | Return a number formatted to specified number of decimal places |
HEX() | Return a hexadecimal representation of a decimal or string value |
INSERT() | Insert a substring at the specified position up to the specified number of characters |
INSTR() | Return the index of the first occurrence of substring |
LCASE() | Synonym for LOWER() |
LEFT() | Return the leftmost number of characters as specified |
LENGTH() | Return the length of a string in bytes |
LIKE | Simple pattern matching |
LOCATE() | Return the position of the first occurrence of substring |
LOWER() | Return the argument in lowercase |
LPAD() | Return the string argument, left-padded with the specified string |
LTRIM() | Remove leading spaces |
MAKE_SET() | Return a set of comma-separated strings that have the corresponding bit in bits set |
MID() | Return a substring starting from the specified position |
NOT LIKE | Negation of simple pattern matching |
NOT REGEXP | Negation of REGEXP |
OCT() | Return a string containing octal representation of a number |
OCTET_LENGTH() | Synonym for LENGTH() |
ORD() | Return character code for leftmost character of the argument |
POSITION() | Synonym for LOCATE() |
QUOTE() | Escape the argument for use in an SQL statement |
REPEAT() | Repeat a string the specified number of times |
REPLACE() | Replace occurrences of a specified string |
REVERSE() | Reverse the characters in a string |
RIGHT() | Return the specified rightmost number of characters |
RPAD() | Append string the specified number of times |
RTRIM() | Remove trailing spaces |
SPACE() | Return a string of the specified number of spaces |
STRCMP() | Compare two strings |
SUBSTR() | Return the substring as specified |
SUBSTRING_INDEX() | Return a substring from a string before the specified number of occurrences of the delimiter |
SUBSTRING() | Return the substring as specified |
TRIM() | Remove leading and trailing spaces |
UCASE() | Synonym for UPPER() |
UNHEX() | Return a string containing hex representation of a number |
UPPER() | Convert to uppercase |
數學函數
function | description |
---|---|
ABS() | Return the absolute value |
ACOS() | Return the arc cosine |
ASIN() | Return the arc sine |
ATAN2(),ATAN() | Return the arc tangent of the two arguments |
ATAN() | Return the arc tangent |
CEIL() | Return the smallest integer value not less than the argument |
CEILING() | Return the smallest integer value not less than the argument |
CONV() | Convert numbers between different number bases |
COS() | Return the cosine |
COT() | Return the cotangent |
CRC32() | Compute a cyclic redundancy check value |
DEGREES() | Convert radians to degrees |
DIV | Integer division |
EXP() | Raise to the power of |
FLOOR() | Return the largest integer value not greater than the argument |
LN() | Return the natural logarithm of the argument |
LOG10() | Return the base-10 logarithm of the argument |
LOG2() | Return the base-2 logarithm of the argument |
LOG() | Return the natural logarithm of the first argument |
MOD() | Return the remainder |
%, MOD | Modulo operator |
PI() | Return the value of pi |
POW() | Return the argument raised to the specified power |
POWER() | Return the argument raised to the specified power |
RADIANS() | Return argument converted to radians |
RAND() | Return a random floating-point value |
ROUND() | Round the argument |
SIGN() | Return the sign of the argument |
SIN() | Return the sine of the argument |
SQRT() | Return the square root of the argument |
TAN() | Return the tangent of the argument |
TRUNCATE() | Truncate to specified number of decimal places |
時間函數
function | description |
---|---|
ADDDATE() | Add time values (intervals) to a date value |
ADDTIME() | Add time |
CURDATE() | Return the current date |
CURRENT_DATE() | CURRENT_DATE Synonyms for CURDATE() |
CURRENT_TIME() | CURRENT_TIME Synonyms for CURTIME() |
CURRENT_TIMESTAMP() | CURRENT_TIMESTAMP Synonyms for NOW() |
CURTIME() | Return the current time |
DATE_ADD() | Add time values (intervals) to a date value |
DATE_FORMAT() | Format date as specified |
DATE_SUB() | Subtract a time value (interval) from a date |
DATE() | Extract the date part of a date or datetime expression |
DATEDIFF() | Subtract two dates |
DAY() | Synonym for DAYOFMONTH() |
DAYNAME() | Return the name of the weekday |
DAYOFMONTH() | Return the day of the month (0-31) |
DAYOFWEEK() | Return the weekday index of the argument |
DAYOFYEAR() | Return the day of the year (1-366) |
EXTRACT() | Extract part of a date |
FROM_DAYS() | Convert a day number to a date |
FROM_UNIXTIME() | Format UNIX timestamp as a date |
GET_FORMAT() | Return a date format string |
HOUR() | Extract the hour |
LAST_DAY() | Return the last day of the month for the argument |
LOCALTIME() | LOCALTIME Synonym for NOW() |
LOCALTIMESTAMP, LOCALTIMESTAMP() | Synonym for NOW() |
MAKEDATE() | Create a date from the year and day of year |
MAKETIME() | Create time from hour, minute, second |
MICROSECOND() | Return the microseconds from argument |
MINUTE() | Return the minute from the argument |
MONTH() | Return the month from the date passed |
MONTHNAME() | Return the name of the month |
NOW() | Return the current date and time |
PERIOD_ADD() | Add a period to a year-month |
PERIOD_DIFF() | Return the number of months between periods |
QUARTER() | Return the quarter from a date argument |
SEC_TO_TIME() | Converts seconds to ‘HH:MM:SS’ format |
SECOND() | Return the second (0-59) |
STR_TO_DATE() | Convert a string to a date |
SUBDATE() | Synonym for DATE_SUB() when invoked with three arguments |
SUBTIME() | Subtract times |
SYSDATE() | Return the time at which the function executes |
TIME_FORMAT() | Format as time |
TIME_TO_SEC() | Return the argument converted to seconds |
TIME() | Extract the time portion of the expression passed |
TIMEDIFF() | Subtract time |
TIMESTAMP() | With a single argument, this function returns the date or datetime expression; with two arguments, the sum of the arguments |
TIMESTAMPADD() | Add an interval to a datetime expression |
TIMESTAMPDIFF() | Subtract an interval from a datetime expression |
UNIX_TIMESTAMP() | Return a UNIX timestamp |
UTC_DATE() | Return the current UTC date |
UTC_TIME() | Return the current UTC time |
UTC_TIMESTAMP() | Return the current UTC date and time |
WEEKDAY() | Return the weekday index |
WEEKOFYEAR() | Return the calendar week of the date (1-53) |
YEAR() | Return the year |
類型轉換函數
function | description |
---|---|
BINARY | Cast a string to a binary string |
CAST() | Cast a value as a certain type |
CONVERT() | Cast a value as a certain type |
最後更新:2016-11-23 17:31:06
上一篇:
DRDS簡單原理__產品簡介_分布式關係型數據庫 DRDS-阿裏雲
下一篇:
專享/共享實例對比__產品簡介_分布式關係型數據庫 DRDS-阿裏雲
批量操作表__管理表_數據庫開發_用戶指南(RDBMS)_數據管理-阿裏雲
漏洞等級說明__漏洞說明_先知計劃-阿裏雲
EDAS 簡介__產品簡介_企業級分布式應用服務 EDAS-阿裏雲
查詢可用鏡像__鏡像相關接口_API 參考_雲服務器 ECS-阿裏雲
附錄:SQL Server 2008 R2/2012 功能差異__快速入門(SQL Server)_雲數據庫 RDS 版-阿裏雲
使用指南__訂閱日誌服務數據_鏈接計算_表格存儲-阿裏雲
使用阿裏雲部署服務__使用手冊_Eclipse 插件-阿裏雲
事件通知__開發人員指南_消息服務-阿裏雲
設置靜態網站托管__管理存儲空間_控製台用戶指南_對象存儲 OSS-阿裏雲
雲上係統專家保障(精簡版)__工作說明書_尊享服務_支持計劃-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲