未验证 提交 30fb299c 编写于 作者: M Ma Jun 提交者: GitHub

docs(Stonedb): fix docs deploy problem.(#287) (#288)

* update Chinese docs and update more dependencies

* Update Chinese docs of advanced-functions

* Update Chinese docs of date-and-time-functions and string-functions

* update picture of Architecture

* update Chinese docs of sql-best-practices

* update Chinese docs of oltp-performance-test-method

* update Chinese docs of oltp-performance-test-method 2
上级 f86f8040
......@@ -5,42 +5,22 @@ sidebar_position: 6.44
# 高级函数
| **函数名** | **描述** | **示例** |
| --- | --- | --- |
| BIN(x) | 返回 x 的二进制编码 | SELECT BIN(28); |
| | | ->11100 |
| BINARY(s) | 将字符串 s 转换为二进制字符串 | SELECT BINARY('STONEDB'); |
| | | -> STONEDB |
| CASE expression<br> WHEN condition1 THEN result1<br> WHEN condition2 THEN result2<br> ...<br> WHEN conditionN THEN resultN<br> ELSE result<br>END | CASE 表示函数开始,END 表示函数结束。如果 condition1 成立,则返回 result1, 如果 condition2 成立,则返回 result2,当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了。 | SELECT CASE <br> WHEN 1>0<br> THEN '1 > 0'<br> WHEN 2>0<br> THEN '2 > 0'<br> ELSE '3 > 0'<br>END; |
| | | ->1>0 |
| CAST(x AS type) | 转换数据类型 | SELECT CAST('2022-06-11' AS DATE); |
| | | ->2022-06-11 |
| COALESCE(expr1, expr2, ...., expr_n) | 返回参数中的第一个非空表达式(从左向右) | SELECT COALESCE(NULL, NULL,'CHINA', NULL, NULL,'STONEDB'); |
| | | ->CHINA |
| CONNECTION_ID() | 返回当前线程ID | SELECT CONNECTION_ID(); |
| | | ->5 |
| CONV(x,f1,f2) | 返回 f1 进制数变成 f2 进制数 | SELECT CONV(28,10,16); |
| | | ->1C |
| CONVERT(s USING cs) | 函数将字符串 s 的字符集变成 cs | SELECT CHARSET('ABC'); |
| | | ->utf8 |
| | | SELECT CHARSET(CONVERT('ABC' USING gbk)); |
| | | ->gbk |
| CURRENT_USER() | 返回当前用户 | SELECT CURRENT_USER(); |
| | | ->root@localhost |
| DATABASE() | 返回当前数据库名 | SELECT DATABASE(); |
| | | ->test |
| IF(expr,v1,v2) | 如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。 | SELECT IF(1>10,'true','false') ; |
| | | ->false |
| IFNULL(v1,v2) | 如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。 | SELECT IFNULL(null,'Hello Word'); |
| | | ->HelloWord |
| ISNULL(expression) | 判断表达式是否为 NULL | SELECT ISNULL(NULL); |
| | | ->1 |
| LAST_INSERT_ID() | 返回最近生成的 AUTO_INCREMENT 值 | SELECT LAST_INSERT_ID(); |
| | | ->0 |
| NULLIF(expr1, expr2) | 比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1 | SELECT NULLIF(25,25); |
| | | ->NULL |
| SESSION_USER()<br>SYSTEM_USER()<br>USER() | 返回当前用户 | SELECT SESSION_USER(); |
| | | ->root@localhost |
| VERSION() | 返回数据库的版本号 | SELECT VERSION(); |
| | | ->5.6.24-StoneDB-log |
| **Function** | **Description** | **Example** |
| --- | --- | :-- |
| BIN(x) | Returns the binary string equivalent to _x_. | SELECT BIN(28);<br /><br />->11100 |
| BINARY(s) | Converts string _s_ to a binary string. | SELECT BINARY('STONEDB');<br /><br />-> STONEDB |
| CASE expression<br />WHEN condition1 THEN result1<br />WHEN condition2 THEN result2<br />...<br />WHEN conditionN THEN resultN<br />ELSE result<br />END | **CASE** specifies the start of the function and **END** specifies the end of the function. <br />If _condition1_ is met, _result1_ is returned. If _condition2_ is met, _result2_ is returned. If all conditions are not met, _result_ is returned. <br />This function stops checking subsequent conditions immediately after a condition is met and returns the corresponding result. | SELECT CASE <br />WHEN 1>0<br />THEN '1 > 0'<br />WHEN 2>0<br />THEN '2 > 0'<br />ELSE '3 > 0'<br />END;<br /><br />->1>0 |
| CAST(x AS type) | Converts the data type of _x_. | SELECT CAST('2022-06-11' AS DATE);<br /><br />->2022-06-11 |
| COALESCE(expr1, expr2, ...., expr_n) | Returns the first non-null value in the specified list. | SELECT COALESCE(NULL, NULL,'CHINA', NULL, NULL,'STONEDB');<br /><br />->CHINA |
| CONNECTION_ID() | Returns the ID of the current connection. | SELECT CONNECTION_ID();<br /><br />->5 |
| CONV(x,f1,f2) | Converts _x_ from base _f1_ to_ f2_. | SELECT CONV(28,10,16);<br /><br />->1C |
| CONVERT(s USING cs) | Changes the character set of string _s_ to character set _cs_. | SELECT CHARSET('ABC');<br /><br />->utf8 <br /><br />SELECT CHARSET(CONVERT('ABC' USING gbk));<br /><br />->gbk |
| CURRENT_USER() | Returns the current user. | SELECT CURRENT_USER();<br /><br />->root@localhost |
| DATABASE() | Returns the name of the current database. | SELECT DATABASE(); <br /><br />->test |
| IF(expr,v1,v2) | Returns value _v1_ if expression _expr_ is true or value _v2_ if expression _expr_ is false. | SELECT IF(1>10,'true','false') ;<br /><br />->false |
| IFNULL(v1,v2) | Returns value _v1_ if value _v1_ is not **null**. Otherwise, value _v2_ is returned. | SELECT IFNULL(null,'Hello Word');<br /><br />->HelloWord |
| ISNULL(expression) | Checks whether _expression_ is **NULL**. | SELECT ISNULL(NULL);<br /><br />->1 |
| LAST_INSERT_ID() | Returns the last AUTO_INCREMENT value. | SELECT LAST_INSERT_ID();<br /><br />->0 |
| NULLIF(expr1, expr2) | Compares two strings _expr1_ and _expr2_.<br />If they are the same, **NULL** is returned. Otherwise, _expr1_ is returned. | SELECT NULLIF(25,25);<br /><br />->NULL |
| SESSION_USER()<br />SYSTEM_USER()<br />USER() | Returns the current user. | SELECT SESSION_USER();<br /><br />->root@localhost |
| VERSION() | Returns the version number of the database. | SELECT VERSION();<br /><br />->5.6.24-StoneDB-log |
\ No newline at end of file
......@@ -5,104 +5,50 @@ sidebar_position: 6.41
# 日期与时间函数
| **函数名** | **描述** | **示例** |
| **Function** | **Description** | **Example** |
| --- | --- | --- |
| ADDDATE(d,n) | 计算起始日期 d 加上 n 天的日期 | SELECT ADDDATE('2022-06-10', INTERVAL 5 DAY); |
| | | ->2022-06-15 |
| ADDTIME(t,n) | n 是一个时间表达式,时间 t 加上时间表达式 n | SELECT ADDTIME('2022-06-10 10:00:00',5); |
| | |
| | | ->2022-06-10 10:00:05 |
| CURDATE()
CURRENT_DATE() | 返回当前日期 | SELECT CURDATE(); |
| | | ->2022-06-10 |
| CURRENT_TIME
CURTIME() | 返回当前时间 | SELECT CURRENT_TIME(); |
| | | ->17:10:31 |
| CURRENT_TIMESTAMP()
LOCALTIME()
LOCALTIMESTAMP()
NOW()
SYSDATE() | 返回当前日期和时间 | SELECT CURRENT_TIMESTAMP(); |
| | | ->2022-06-10 17:11:06 |
| DATE() | 从日期或日期时间表达式中提取日期值 | SELECT DATE('2022-06-10'); |
| | | ->2022-06-10 |
| DATEDIFF(d1,d2) | 计算日期 d1与d2 之间相隔的天数 | SELECT DATEDIFF('2022-06-10','2021-06-10'); |
| | | ->365 |
| DATE_ADD(d,INTERVAL expr type) | 计算起始日期 d 加上一个时间段后的日期,type 可以是second、minute、hour、day、week、month、year等 | SELECT DATE_ADD('2022-06-10 17:17:21', INTERVAL -3 HOUR); |
| | | ->2022-06-10 14:17:21 |
| DATE_FORMAT(d,f) | 按表达式f的要求显示日期 d | SELECT DATE_FORMAT('2022-06-10 17:21:11','%Y-%m-%d %r'); |
| | | ->2022-06-10 05:21:11 PM |
| DATE_SUB(date,INTERVAL expr type) | 函数从日期减去指定的时间间隔。 | SELECT DATE_SUB(
CURRENT_DATE(),INTERVAL 2 DAY); |
| | | ->2022-06-08 |
| DAY(d) | 返回日期值 d 的日期部分 | SELECT DAY('2022-06-10'); |
| | | ->10 |
| DAYNAME(d) | 返回日期 d 是星期几,如 Monday,Tuesday | SELECT DAYNAME('2022-06-10 17:30:30'); |
| | | ->Friday |
| DAYOFMONTH(d) | 计算日期 d 是本月的第几天 | SELECT DAYOFMONTH('2022-06-10 17:31:11'); |
| | | ->10 |
| DAYOFWEEK(d) | 日期 d 今天是星期几,1 星期日,2 星期一,以此类推 | SELECT DAYOFWEEK('2022-06-10 17:35:11'); |
| | | ->6 |
| DAYOFYEAR(d) | 计算日期 d 是本年的第几天 | SELECT DAYOFYEAR('2022-06-10 18:02:11'); |
| | | ->161 |
| EXTRACT(type FROM d) | 从日期 d 中获取指定的值,type 指定返回的值。type 可以是second、minute、hour、day、week、month、year等 | SELECT EXTRACT(MONTH FROM '2022-06-10 18:02:33') ; |
| | | ->6 |
| HOUR(t) | 返回 t 中的小时值 | SELECT HOUR('18:06:31'); |
| | | ->18 |
| LAST_DAY(d) | 返回给给定日期的那一月份的最后一天 | SELECT LAST_DAY("2022-06-10"); |
| | | ->2022-06-30 |
| MAKEDATE(year, day-of-year) | 基于给定参数年份 year 和所在年中的天数序号 day-of-year 返回一个日期 | SELECT MAKEDATE(2022,161); |
| | | ->2022-06-10 |
| MAKETIME(hour, minute, second) | 组合时间,参数分别为小时、分钟、秒 | SELECT MAKETIME(11,35,4); |
| | | ->11:35:04 |
| MICROSECOND(date) | 返回日期参数所对应的微秒数 | SELECT MICROSECOND('2022-06-10 18:12:00.000023'); |
| | | ->23 |
| MINUTE(t) | 返回 t 中的分钟值 | SELECT MINUTE('18:12:31'); |
| | | ->12 |
| MONTHNAME(d) | 返回日期当中的月份名称,如 November | SELECT MONTHNAME('2022-06-10 18:13:19'); |
| | | ->June |
| MONTH(d) | 返回日期d中的月份值,1 到 12 | SELECT MONTH('2022-06-10 18:14:11'); |
| | | ->6 |
| PERIOD_ADD(period, number) | 为 年-月 组合日期添加一个时段 | SELECT PERIOD_ADD(202206,5); |
| | | ->202211 |
| PERIOD_DIFF(period1, period2) | 返回两个时段之间的月份差值 | SELECT PERIOD_DIFF(202204,202012); |
| | | ->16 |
| QUARTER(d) | 返回日期d是第几季节,返回 1 到 4 | SELECT QUARTER('2022-06-10 18:16:29'); |
| | | ->2 |
| SECOND(t) | 返回 t 中的秒钟值 | SELECT SECOND('18:17:36'); |
| | | ->36 |
| SEC_TO_TIME(s) | 将以秒为单位的时间 s 转换为时分秒的格式 | SELECT SEC_TO_TIME(4320); |
| | | ->01:12:00 |
| STR_TO_DATE(string, format_mask) | 将字符串转变为日期 | SELECT STR_TO_DATE('June 10 2022','%M %d %Y'); |
| | | ->2022-06-10 |
| SUBDATE(d,n) | 日期 d 减去 n 天后的日期 | SELECT SUBDATE('2022-06-10 18:19:27',15); |
| | | ->2022-05-26 18:19:27 |
| SUBTIME(t,n) | 时间 t 减去 n 秒的时间 | SELECT SUBTIME('2022-06-10 18:21:11',5); |
| | | ->2022-06-10 18:21:06 |
| TIME(expression) | 提取传入表达式的时间部分 | SELECT TIME('18:22:10'); |
| | | ->18:22:10 |
| TIME_FORMAT(t,f) | 按表达式 f 的要求显示时间 t | SELECT TIME_FORMAT('18:22:59','%r'); |
| | | 06:22:59 PM |
| TIME_TO_SEC(t) | 将时间 t 转换为秒 | SELECT TIME_TO_SEC('18:24:00'); |
| | | ->66240 |
| TIMEDIFF(time1, time2) | 计算时间差值 | SELECT TIMEDIFF('18:24:11','13:10:10'); |
| | | ->05:14:01 |
| TIMESTAMP(expression, interval) | 单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和 | SELECT TIMESTAMP('2022-06-10', '18:25:17'); |
| | | ->2022-06-10 18:25:17 |
| TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2) | 计算时间差,返回 datetime_expr2 − datetime_expr1 的时间差 | SELECT TIMESTAMPDIFF(DAY,'2020-12-23','2022-04-02'); |
| | | ->465 |
| | | SELECT TIMESTAMPDIFF(MONTH,'2020-12-23','2022-04-02'); |
| | | ->15 |
| TO_DAYS(d) | 计算日期 d 距离 0000 年 1 月 1 日的天数 | SELECT TO_DAYS('2022-06-10 00:00:00'); |
| | | ->738681 |
| WEEK(d) | 计算日期 d 是本年的第几个星期,范围是 0 到 53 | SELECT WEEK('2022-06-10 00:00:00'); |
| | | ->23 |
| WEEKDAY(d) | 日期 d 是星期几,0 表示星期一,1 表示星期二 | SELECT WEEKDAY('2022-06-10'); |
| | | ->4 |
| WEEKOFYEAR(d) | 计算日期 d 是本年的第几个星期,范围是 0 到 53 | SELECT WEEKOFYEAR('2022-06-10 11:11:11'); |
| | | ->23 |
| YEAR(d) | 返回年份 | SELECT YEAR('2022-06-10'); |
| | | ->2022 |
| YEARWEEK(date, mode) | 返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一,以此类推 | SELECT YEARWEEK('2022-06-10'); |
| | | ->202223 |
| ADDDATE(d,n) | Adds time value (interval) _n_ to date _d_. | SELECT ADDDATE('2022-06-10', INTERVAL 5 DAY);<br /><br />->2022-06-15 |
| ADDTIME(t,n) | Adds time _n_ to time _t_. | SELECT ADDTIME('2022-06-10 10:00:00',5);<br /><br />->2022-06-10 10:00:05 |
| CURDATE()<br />CURRENT_DATE() | Returns the current date. | SELECT CURDATE();<br /><br />->2022-06-10 |
| CURRENT_TIME<br />CURTIME() | Returns the current time. | SELECT CURRENT_TIME();<br /><br />->17:10:31 |
| CURRENT_TIMESTAMP()<br />LOCALTIME()<br />LOCALTIMESTAMP()<br />NOW()<br />SYSDATE() | Returns the current date and time. | SELECT CURRENT_TIMESTAMP();<br /><br />->2022-06-10 17:11:06 |
| DATE() | Extracts the date part of a date or datetime expression. | SELECT DATE('2022-06-10'); <br /><br />->2022-06-10 |
| DATEDIFF(d1,d2) | Subtracts two dates. _d1_ and _d2_ each specify a date. | SELECT DATEDIFF('2022-06-10','2021-06-10');<br /><br />->365 |
| DATE_ADD(d,INTERVAL expr type) | Add time values (intervals) to date _d_. <br />_type_ can be set to **SECOND**, **MINUTE**, **HOUR**, **DAY**, **WEEK**, **MONTH**, and **YEAR**. | SELECT DATE_ADD('2022-06-10 17:17:21', INTERVAL -3 HOUR); <br /><br />->2022-06-10 14:17:21 |
| DATE_FORMAT(d,f) | Formats date _d_ based on expression _f_. | SELECT DATE_FORMAT('2022-06-10 17:21:11','%Y-%m-%d %r');<br /><br />->2022-06-10 05:21:11 PM |
| DATE_SUB(date,INTERVAL expr type) | Subtracts a time value (interval) from date _date_.<br />_type_ can be set to **SECOND**, **MINUTE**, **HOUR**, **DAY**, **WEEK**, **MONTH**, and **YEAR**. | SELECT DATE_SUB(<br />CURRENT_DATE(),INTERVAL 2 DAY);<br /><br />->2022-06-08 |
| DAY(d) | Returns the day in date _d_. | SELECT DAY('2022-06-10'); <br /><br />->10 |
| DAYNAME(d) | Returns the name of the weekday from date** **_d_, for example, **Monday**. | SELECT DAYNAME('2022-06-10 17:30:30');<br /><br />->Friday |
| DAYOFMONTH(d) | Returns the day of the month from date _d_. | SELECT DAYOFMONTH('2022-06-10 17:31:11');<br /><br />->10 |
| DAYOFWEEK(d) | Returns the weekday index from date _d_. <br />The return value ranges from 1 to 7 and value 1 indicates Sunday. | SELECT DAYOFWEEK('2022-06-10 17:35:11');<br /><br />->6 |
| DAYOFYEAR(d) | Returns the day of the year from date _d_. | SELECT DAYOFYEAR('2022-06-10 18:02:11');<br /><br />->161 |
| EXTRACT(type FROM d) | Extracts part of date _d_. <br />_type_ can be set to **SECOND**, **MINUTE**, **HOUR**, **DAY**, **WEEK**, **MONTH**, and **YEAR**. | SELECT EXTRACT(MONTH FROM '2022-06-10 18:02:33') ;<br /><br />->6 |
| HOUR(t) | Extracts the hour from time _t_. | SELECT HOUR('18:06:31');<br /><br />->18 |
| LAST_DAY(d) | Returns the last day of the month from date _d_. | SELECT LAST_DAY("2022-06-10");<br /><br />->2022-06-30 |
| MAKEDATE(year, day-of-year) | Creates a date based on the given year and day of year. <br />_year_ specifies the year. _day-of-year_ specifies the day of year. | SELECT MAKEDATE(2022,161);<br /><br />->2022-06-10 |
| MAKETIME(hour, minute, second) | Creates time based on the given hour, minute, and second. | SELECT MAKETIME(11,35,4);<br /><br />->11:35:04 |
| MICROSECOND(date) | Returns the microseconds from date _date_. | SELECT MICROSECOND('2022-06-10 18:12:00.000023');<br /><br />->23 |
| MINUTE(t) | Returns the minute from time _t_. | SELECT MINUTE('18:12:31');<br /><br />->12 |
| MONTHNAME(d) | Returns the name of the month from date _d_, such as **November**. | SELECT MONTHNAME('2022-06-10 18:13:19');<br /><br />->June |
| MONTH(d) | Returns the month from date _d_. <br />The return value ranges from 1 to 12. | SELECT MONTH('2022-06-10 18:14:11');<br /><br />->6 |
| PERIOD_ADD(period, number) | Adds a period (expressed in months) to a year-month. <br />_period_ specifies the year-month. _number_ specifies the period to add. | SELECT PERIOD_ADD(202206,5); <br /><br />->202211 |
| PERIOD_DIFF(period1, period2) | Returns the number of months between periods. | SELECT PERIOD_DIFF(202204,202012);<br /><br />->16 |
| QUARTER(d) | Returns the quarter from date _d_. <br />The return value ranges from 1 to 4. | SELECT QUARTER('2022-06-10 18:16:29');<br /><br />->2 |
| SECOND(t) | Returns the second from time _t_. | SELECT SECOND('18:17:36');<br /><br />->36 |
| SEC_TO_TIME(s) | Converts time _s_ which is expressed in seconds to the hh:mm:ss format. | SELECT SEC_TO_TIME(4320);<br /><br />->01:12:00 |
| STR_TO_DATE(string, format_mask) | Converts a string to a date. | SELECT STR_TO_DATE('June 10 2022','%M %d %Y');<br /><br />->2022-06-10 |
| SUBDATE(d,n) | Subtracts interval _n_ from date _d_. | SELECT SUBDATE('2022-06-10 18:19:27',15);<br /><br />->2022-05-26 18:19:27 |
| SUBTIME(t,n) | Subtracts period_ n_ from time _t_. n is expressed in seconds. | SELECT SUBTIME('2022-06-10 18:21:11',5);<br /><br />->2022-06-10 18:21:06 |
| TIME(expression) | Extracts the time portion of an expression. | SELECT TIME('18:22:10');<br /><br />->18:22:10 |
| TIME_FORMAT(t,f) | Formats time _t_ based on expression _f_. | SELECT TIME_FORMAT('18:22:59','%r');<br /><br />->06:22:59 PM |
| TIME_TO_SEC(t) | Converts time _t_ to seconds. | SELECT TIME_TO_SEC('18:24:00');<br /><br />->66240 |
| TIMEDIFF(time1, time2) | Subtracts two points in time. <br />_time1_ and _time2_ each specify a point in time. | SELECT TIMEDIFF('18:24:11','13:10:10');<br /><br />->05:14:01 |
| TIMESTAMP(expression, interval) | With a single argument, this function returns the date or datetime expression. With two arguments, this function returns the sum of the arguments. | SELECT TIMESTAMP('2022-06-10', '18:25:17');<br /><br />->2022-06-10 18:25:17 |
| TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2) | Subtracts two datetime expressions. <br />_datetime_expr1_ and _datetime_expr2_ each specify a datetime expression. _unit_ specifies the unit of the return value. | <br />1. SELECT TIMESTAMPDIFF(DAY,'2020-12-23','2022-04-02');<br /> ->465<br /><br /><br />2. SELECT TIMESTAMPDIFF(MONTH,'2020-12-23','2022-04-02'); <br /> ->15<br /> |
| TO_DAYS(d) | Converts date _d_ to the number of days since date 0000-01-01. | SELECT TO_DAYS('2022-06-10 00:00:00');<br /><br />->738681 |
| WEEK(d) | Returns the week number of date_ d_. <br />The return value ranges from 0 to 53. | SELECT WEEK('2022-06-10 00:00:00');<br /><br />->23 |
| WEEKDAY(d) | Returns the weekday index of date _d_. <br />For example, return value **0** indicates Monday and **1** indicates Tuesday. | SELECT WEEKDAY('2022-06-10');<br /><br />->4 |
| WEEKOFYEAR(d) | Returns the calendar week of date _d_. <br />The return value ranges from 0 to 53. | SELECT WEEKOFYEAR('2022-06-10 11:11:11');<br /><br />->23 |
| YEAR(d) | Returns the year of date _d_. | SELECT YEAR('2022-06-10');<br /><br />->2022 |
| YEARWEEK(date, mode) | Returns the year and week number (value range: 0 to 53). <br />_mode_ is optional and specifies what day a week starts on. For example, return value **0** indicates Sunday and **1** indicates Monday. | SELECT YEARWEEK('2022-06-10');<br /><br />->202223 |
......@@ -5,35 +5,33 @@ sidebar_position: 6.43
# 数学函数
| **函数名** | **描述** | **示例** |
| **Function** | **Description** | **Example** |
| --- | --- | --- |
| ABS(x) | 求绝对值 | SELECT ABS(-1);<br>->1 |
| ASIN(x) | 求反正弦值(单位为弧度),x 为一个数值 | SELECT ASIN(0.5);<br>->0.5235987755982989 |
| ATAN2(n, m) | 求反正切值(单位为弧度) | SELECT ATAN2(1,2);<br>->0.4636476090008061 |
| COS(x) | 求余弦值(参数是弧度) | SELECT COS(2);<br>->-0.4161468365471424 |
| COT(x) | 求余切值(参数是弧度) | SELECT COT(2);<br>->-0.45765755436028577 |
| TAN(x) | 求正切值(参数是弧度) | SELECT TAN(45); <br>->1.6197751905438615 |
| SIN(x) | 求正弦值(参数是弧度) | SELECT SIN(RADIANS(30));<br>->0.49999999999999994 |
| CEIL(x)<br>CEILING(x) | 返回大于或等于 x 的最小整数 | SELECT CEIL(4.19);<br>->5 |
| DEGREES(x) | 将弧度转换为角度 | SELECT DEGREES(3.1415926535898);<br>->180.0000000000004 |
| EXP(x) | 返回 e 的 x 次方 | SELECT EXP(2);<br>->7.38905609893065 |
| FLOOR(x) | 返回小于或等于 x 的最大整数 | SELECT FLOOR(3.24);<br>->3 |
| GREATEST(expr1, expr2, expr3, ...) | 返回列表中的最大值 | SELECT GREATEST(79,36,3,8,1);<br>->79 |
| LEAST(expr1, expr2, expr3, ...) | 返回列表中的最小值 | SELECT LEAST(79,36,3,8,1);<br>->1 |
| LN | 返回数字的自然对数,以 e 为底。 | SELECT LN(3); <br>->1.0986122886681098 |
| LOG(x,y) | 返回以x为低的对数 | SELECT LOG(3,81);<br>->4 |
| LOG2(x) | 返回以 2 为底的对数 | SELECT LOG2(64); <br>->6 |
| PI() | 返回圆周率 | SELECT PI();<br>->3.141593 |
| POW(x,y)<br>POWER(x,y) | 返回 x 的 y 次方 | SELECT POW(2,4);<br>->16 |
| RAND() | 返回 0 到 1 的随机数 | SELECT RAND();<br>->0.12216221831940322 |
| ROUND(x) | 返回离 x 最近的整数 | SELECT ROUND(-5.26);<br>->-5 |
| SQRT(x) | 返回x的平方根 | SELECT SQRT(81);<br>->9 |
| TRUNCATE(x,y) | 返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入) | SELECT TRUNCATE(2.2849106,3);<br>->2.284 |
| ABS(x) | 求绝对值 | SELECT ABS(-1);<br>->1 |
| ASIN(x) | 求反正弦值(单位为弧度),x 为一个数值 | SELECT ASIN(0.5);<br>->0.5235987755982989 |
| ATAN(x) | 求反正切值(单位为弧度),x 为一个数值 | SELECT ATAN(2.5);<br>->1.1902899496825317 |
| ATAN2(n, m) | 求反正切值(单位为弧度) | SELECT ATAN2(1,2);<br>->0.4636476090008061 |
| COS(x) | 求余弦值(参数是弧度) | SELECT COS(2);<br>->-0.4161468365471424 |
| TAN(x) | 求正切值(参数是弧度) | SELECT TAN(45); <br>->1.6197751905438615 |
| ABS(x) | Returns the absolute value. | SELECT ABS(-1);<br /><br />->1 |
| ACOS(x) | Returns the arc cosine of numeral value _x_. | SELECT ACOS(0.5);<br /><br />->1.0471975511965979 |
| ASIN(x) | Returns the arc sine of numeral value _x_. | SELECT ASIN(0.5);<br /><br />->0.5235987755982989 |
| ATAN(x) | Returns the arc tangent of numeral value _x_. | SELECT ATAN(2.5);<br /><br />->1.1902899496825317 |
| ATAN2(n, m) | Returns the arc tangent of two numeral values. | SELECT ATAN2(1,2);<br /><br />->0.4636476090008061 |
| COS(x) | Returns the cosine of radian _x_. | SELECT COS(2);<br /><br />->-0.4161468365471424 |
| COT(x) | Returns the cotangent of radian _x_. | SELECT COT(2);<br /><br />->-0.45765755436028577 |
| TAN(x) | Returns the tangent of radian _x_. | SELECT TAN(45); <br /><br />->1.6197751905438615 |
| SIN(x) | Returns the sine of radian _x_. | SELECT SIN(RADIANS(30));<br /><br />->0.49999999999999994 |
| CEIL(x)<br />CEILING(x) | Returns the smallest integer value that is not smaller than _x_. | SELECT CEIL(4.19);<br /><br />->5 |
| DEGREES(x) | Converts radian _x_ to a degree. | SELECT DEGREES(3.1415926535898);<br /><br />->180.0000000000004 |
| EXP(x) | Returns the natural exponential of _x_. | SELECT EXP(2);<br /><br />->7.38905609893065 |
| FLOOR(x) | Returns the largest integer value that is not greater than _x_. | SELECT FLOOR(3.24);<br /><br />->3 |
| GREATEST(expr1, expr2, expr3, ...) | Returns the greatest value within the specified list. | SELECT GREATEST(79,36,3,8,1);<br /><br />->79<br /><br />SELECT GREATEST('Hello','CHINA','STONEDB'); <br /><br />->STONEDB |
| LEAST(expr1, expr2, expr3, ...) | Returns the smallest value within the specified list. | SELECT LEAST(79,36,3,8,1);<br />->1<br /><br />SELECT LEAST('Hello','CHINA','STONEDB'); <br />->CHINA |
| LN(x) | Returns the natural logarithm of _x_. | SELECT LN(3); <br /><br />->1.0986122886681098 |
| LOG(x,y) | Returns the base-x logarithm of_ y_. | SELECT LOG(3,81);<br /><br />->4 |
| LOG2(x) | Returns the base-2 logarithm of_ x_. | SELECT LOG2(64); <br /><br />->6 |
| PI() | Returns the value of pi. | SELECT PI();<br /><br />->3.141593 |
| POW(x,y),<br />POWER(x,y) | Returns _x_ raised to the specified power of _y_. | SELECT POW(2,4);<br /><br />->16 |
| RAND() | Returns a random number between 0 and 1. | SELECT RAND();<br /><br />->0.12216221831940322 |
| ROUND(x) | Returns the value of _x_ rounded to the nearest integer. | SELECT ROUND(-5.26);<br /><br />->-5 |
| SIGN(x) | Returns the sign of _x_. <br />- If _x_ is a negative value, **-1** is returned. <br />- If_ x_ is 0, **0** is returned. <br />- If _x_ is a positive value, **1** is returned.<br /> | SELECT SIGN(-10);<br /><br />->(-1) |
| SQRT(x) | Returns the square root of _x_. | SELECT SQRT(81);<br /><br />->9 |
| TRUNCATE(x,y) | Truncates _x_ to retain _y_ decimal places. | SELECT TRUNCATE(2.2849106,3);<br /><br />->2.284 |
......@@ -5,58 +5,31 @@ sidebar_position: 6.42
# 字符串函数
| **函数** | **描述** | **示例** |
| **Function** | **Description** | **Example** |
| --- | --- | --- |
| ASCII(s) | 返回字符串 s 的第一个字符的 ASCII 码 | select ASCII('CHINA'); |
| | | ->67 |
| CHAR_LENGTH(s)<br>CHARACTER_LENGTH(s) | 返回字符串 s 的字符数 | SELECT CHAR_LENGTH('CHINA'); |
| | | ->5 |
| CONCAT(s1,s2...sn)<br>CONCAT_WS(x, s1,s2...sn) | 字符串 s1,s2 等多个字符串合并为一个字符串 | SELECT CONCAT('Welcome to ','CHINA'); |
| | | ->Welcome to CHINA |
| FIELD(s,s1,s2...) | 返回第一个字符串 s 在字符串列表(s1,s2...)中的位置 | SELECT FIELD("c","a","b","c","d","e"); |
| | | ->3 |
| FIND_IN_SET(s1,s2) | 返回在字符串s2中与s1匹配的字符串的位置 | SELECT FIND_IN_SET("c","a,b,c,d,e"); |
| | | ->3 |
| FORMAT(x,n) | 函数可以将数字 x 进行格式化 "#,###.##", 将 x 保留到小数点后 n 位,最后一位四舍五入。 | SELECT FORMAT(9105885500.534,2); |
| | | ->9,105,885,500.53 |
| INSERT(s1,x,len,s2) | 字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串 | SELECT INSERT('Welcome to CHINA',1,6,'I love'); |
| | | ->I lovee to CHINA |
| LOCATE(s1,s) | 从字符串 s 中获取 s1 的开始位置 | SELECT LOCATE('db','stonedb'); |
| | | ->6 |
| LCASE(s)<br>LOWER(s) | 将字符串 s 的所有字母变成小写字母 | SELECT LCASE('STONEDB'); |
| | | ->stonedb |
| LEFT(s,n) | 返回字符串 s 的前 n 个字符 | SELECT LEFT('stonedb',5); |
| | | ->stone |
| LPAD(s1,len,s2) | 在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len | SELECT LPAD('one',5,'st'); |
| | | ->stone |
| LTRIM(s) | 去掉字符串 s 开始处的空格 | SELECT LTRIM(' STONEDB'); |
| | | ->STONEDB |
| MID(s,n,len) | 从字符串 s 的 n 位置截取长度为 len 的子字符串,同 SUBSTRING(s,n,len) | SELECT MID('stonedb',2,3); |
| | | ->ton |
| POSITION(s1 IN s) | 从字符串 s 中获取 s1 的开始位置 | SELECT POSITION('db'in'stonedb'); |
| | | ->6 |
| REPEAT(s,n) | 将字符串 s 重复 n 次 | SELECT REPEAT('hello',3); |
| | | ->hellohellohello |
| REPLACE(s,s1,s2) | 将字符串 s2 替代字符串 s 中的字符串 s1 | SELECT REPLACE('stonedb','db','x'); |
| | | ->stonex |
| REVERSE(s) | 将字符串s的顺序反过来 | SELECT REVERSE('stonedb'); |
| | | ->bdenots |
| RIGHT(s,n) | 返回字符串 s 的后 n 个字符 | SELECT RIGHT('stonedb',5); |
| | | ->onedb |
| RPAD(s1,len,s2) | 在字符串 s1 的结尾处添加字符串 s2,使字符串的长度达到 len | SELECT RPAD('stone',7,'db'); |
| | | ->stonedb |
| RTRIM(s) | 去掉字符串 s 结尾处的空格 | SELECT RTRIM('STONEDB '); |
| | | ->STONEDB |
| SPACE(n) | 返回 n 个空格 | SELECT SPACE(10); |
| | | -> |
| STRCMP(s1,s2) | 比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1 | SELECT STRCMP('stonedb','stone'); |
| | | ->1 |
| SUBSTR(s, start, length) | 从字符串 s 的 start 位置截取长度为 length 的子字符串 | SELECT SUBSTR('STONEDB',2,3); |
| | | ->TON |
| SUBSTRING_INDEX(s, delimiter, number) | 返回从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串。 | SELECT SUBSTRING_INDEX('stonedb','n',1); |
| | | ->sto |
| TRIM(s) | 去掉字符串 s 开始和结尾处的空格 | SELECT TRIM(' STONEDB '); |
| | | ->STONEDB |
| UCASE(s)<br>UPPER(s) | 将字符串转换为大写 | SELECT UCASE('stonedb'); |
| | | ->STONEDB |
| ASCII(s) | Returns the numeric value of the leftmost character of string _s_. | select ASCII('CHINA');<br /><br />->67 |
| CHAR_LENGTH(s)<br />CHARACTER_LENGTH(s) | Returns the number of characters in string _s_. | SELECT CHAR_LENGTH('CHINA');<br /><br />->5 |
| CONCAT(s1,s2...sn)<br />CONCAT_WS(x, s1,s2...sn) | Concatenates strings _s1_, _s2_, … _Sn_. | SELECT CONCAT('Welcome to ','CHINA');<br /><br />->Welcome to CHINA |
| FIELD(s,s1,s2...) | Returns the index of the first string _s_ in the list of subsequent strings (_s1_, _s2_, …). | SELECT FIELD("c","a","b","c","d","e");<br /><br />->3 |
| FIND_IN_SET(s1,s2) | Returns the index of the first string _s1_ within the second string _s2_. | SELECT FIND_IN_SET("c","a,b,c,d,e");<br /><br />->3 |
| FORMAT(x,n) | Returns a number formatted to _n_ decimal places. <br />_x_ specifies the number to format. The return value is in the #,###.## format. | SELECT FORMAT(9105885500.534,2); <br /><br />->9,105,885,500.53 |
| INSERT(s1,x,len,s2) | Inserts substring _s2_ at a given position up to the specified number of characters in string _s1_. <br />_x_ specifies position to insert. _len_ specifies the number of characters. | SELECT INSERT('Welcome to CHINA',1,6,'I love');<br /><br />->I lovee to CHINA |
| LOCATE(s1,s) | Returns the position of the first occurrence of substring s1 in string s. | SELECT LOCATE('db','stonedb'); <br /><br />->6 |
| LCASE(s)<br />LOWER(s) | Returns every character in string _s_ in lowercase. | SELECT LCASE('STONEDB');<br /><br />->stonedb |
| LEFT(s,n) | Returns the leftmost n characters in string_ s_. | SELECT LEFT('stonedb',5);<br /><br />->stone |
| LPAD(s1,len,s2) | Left-pads string _s2_ with string _s1_ to the specified length _len_. | SELECT LPAD('one',5,'st');<br /><br />->stone |
| LTRIM(s) | Remove leading spaces in string _s_. | SELECT LTRIM(' STONEDB');<br /><br />->STONEDB |
| MID(s,n,len) | Returns a substring of string s starting from a given position. <br />_n_ specifies the position. _len_ specifies the length of the substring. This function is the Synonym for SUBSTRING(s,n,len). | SELECT MID('stonedb',2,3);<br /><br />->ton |
| POSITION(s1 IN s) | Returns the position of the first occurrence of substring _s1_ in string _s_. | SELECT POSITION('db'in'stonedb');<br /><br />->6 |
| REPEAT(s,n) | Repeats string _s_ for _n_ times. | SELECT REPEAT('hello',3);<br /><br />->hellohellohello |
| REPLACE(s,s1,s2) | Replaces substring _s1_ in string _s_ with substring _s2_. | SELECT REPLACE('stonedb','db','x');<br /><br />->stonex |
| REVERSE(s) | Reverses the characters in string _s_. | SELECT REVERSE('stonedb');<br /><br />->bdenots |
| RIGHT(s,n) | Returns _n_ rightmost characters in string _s_. | SELECT RIGHT('stonedb',5);<br /><br />->onedb |
| RPAD(s1,len,s2) | Right-pads string _s2_ to string _s1_ to the specified length _len_. | SELECT RPAD('stone',7,'db');<br /><br />->stonedb |
| RTRIM(s) | Remove trailing spaces in string _s_. | SELECT RTRIM('STONEDB ');<br /><br />->STONEDB |
| SPACE(n) | Returns _n_ spaces. | SELECT SPACE(10);<br /><br />-> |
| STRCMP(s1,s2) | Compares the lengths of strings _s1_ and_ s2_. <br />- If _s1_ = _s2_, **0** is returned. <br />- If _s1_ > _s2_, **1** is returned. <br />- If _s1_ < _s2_, **-1** is returned.<br /> | SELECT STRCMP('stonedb','stone'); <br /><br />->1 |
| SUBSTR(s, start, length) | Returns a substring of the specified length within string _s_. <br />_start_ specifies the position from which the substring starts. | SELECT SUBSTR('STONEDB',2,3);<br /><br />->TON |
| SUBSTRING_INDEX(s, delimiter, number) | Returns a substring from string _s_ before the specified number of occurrences of the delimiter. | SELECT SUBSTRING_INDEX('stonedb','n',1);<br /><br />->sto |
| TRIM(s) | Removes leading and trailing spaces in string _s_. | SELECT TRIM(' STONEDB ');<br /><br />->STONEDB |
| UCASE(s)<br />UPPER(s) | Returns every character in string _s_ in uppercase. | SELECT UCASE('stonedb');<br /><br />->STONEDB |
......@@ -18,7 +18,7 @@ sidebar_position: 7.41
10)无论是表还是字段,字符集建议一致。
11)无论是表还是字段,有必要加入注释,有注释更易于维护和易读。
## 二、SQL编写规范
### 2.1 避免select *
### 2.1 避免`select *`
查询尽量用确定的字段名,不因图方便用*来代替,理由:
1)将不需要的字段从服务端传输到客户端,额外增加了网络开销;
2)影响SQL的执行计划,例如:用select *进行查询时,很可能不会使用到覆盖索引,就会造成回表查询。
......@@ -30,7 +30,7 @@ select * from test;
```sql
select id,name from test;
```
### 2.2 避免在where子句中使用or
### 2.2 避免在`where`子句中使用`or`
多个字段进行or查询时,建议用union all联结,分成多次查询。
理由:使用or可能会导致索引失效
反例:
......@@ -74,9 +74,9 @@ select * from test where group_id=40;
```sql
select * from test where group_id='40';
```
### 2.6 避免在索引列上使用NOT、<>
### 2.6 避免在索引列上使用`NOT`、`<>`
理由:导致索引失效
### 2.7 避免在索引列上使用IS NOT NULL
### 2.7 避免在索引列上使用`IS NOT NULL`
理由:导致索引失效
### 2.8 尽量少用前置通配符
理由:导致索引失效
......
......@@ -83,7 +83,7 @@ bin/sysbench --db-driver=mysql --mysql-host=xx.xx.xx.xx --mysql-port=3306 --mysq
| threads | 测试线程数。 |
| percentile | 需要统计的百分比,默认值为95%,即请求在95%的情况下的执行时间。 |
| report-interval | 表示N秒输出一次测试进度报告,0表示关闭测试进度报告输出,仅输出最终的报告结果。 |
| skip-trx | 是否跳过事务。<br>- 1:跳过<br>- 0:不跳过 |
| skip-trx | 是否跳过事务。1:跳过;0:不跳过 |
| mysql-socket | 本地的实例可以指定socket文件 |
| create_secondary | 是否创建二级索引,默认true |
......
......@@ -4557,22 +4557,24 @@ globby@^13.1.1:
merge2 "^1.4.1"
slash "^4.0.0"
got@^9.6.0:
version "9.6.0"
resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==
dependencies:
"@sindresorhus/is" "^0.14.0"
"@szmarczak/http-timer" "^1.1.2"
cacheable-request "^6.0.0"
decompress-response "^3.3.0"
duplexer3 "^0.1.4"
get-stream "^4.1.0"
lowercase-keys "^1.0.1"
mimic-response "^1.0.1"
p-cancelable "^1.0.0"
to-readable-stream "^1.0.0"
url-parse-lax "^3.0.0"
got@^12.1.0:
version "12.1.0"
resolved "https://registry.npmjs.org/got/-/got-12.1.0.tgz#099f3815305c682be4fd6b0ee0726d8e4c6b0af4"
integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==
dependencies:
"@sindresorhus/is" "^4.6.0"
"@szmarczak/http-timer" "^5.0.1"
"@types/cacheable-request" "^6.0.2"
"@types/responselike" "^1.0.0"
cacheable-lookup "^6.0.4"
cacheable-request "^7.0.2"
decompress-response "^6.0.0"
form-data-encoder "1.7.1"
get-stream "^6.0.1"
http2-wrapper "^2.1.10"
lowercase-keys "^3.0.0"
p-cancelable "^3.0.0"
responselike "^2.0.0"
graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9:
version "4.2.10"
......@@ -6306,9 +6308,9 @@ mockjs@^1.1.0:
commander "*"
moment@^2.24.0, moment@^2.29.2:
version "2.29.3"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.3.tgz#edd47411c322413999f7a5940d526de183c031f3"
integrity sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==
version "2.29.4"
resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108"
integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
mri@^1.1.0:
version "1.2.0"
......@@ -6436,14 +6438,7 @@ nprogress@^0.2.0:
resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1"
integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==
nth-check@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
dependencies:
boolbase "~1.0.0"
nth-check@^2.0.1:
nth-check@^2.0.1, nth-check@^1.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
......@@ -6593,7 +6588,7 @@ package-json@^6.3.0:
resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0"
integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==
dependencies:
got "^9.6.0"
got "^12.1.0"
registry-auth-token "^4.0.0"
registry-url "^5.0.0"
semver "^6.2.0"
......@@ -8894,10 +8889,10 @@ trim-trailing-lines@^1.0.0:
resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0"
integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==
trim@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"
integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==
trim@1.0.1, trim@0.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/trim/-/trim-1.0.1.tgz#68e78f6178ccab9687a610752f4f5e5a7022ee8c"
integrity sha512-3JVP2YVqITUisXblCDq/Bi4P9457G/sdEamInkyvCsjbTcXLXIiG7XCb4kGMFWh6JGXesS3TKxOPtrncN/xe8w==
trough@^1.0.0:
version "1.0.5"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册