12、Seata实战:Seata之SQL语句限制

本文详细解析了分布式事务框架Seata对SQL语句的支持与限制,包括DML语句类型、SQL修饰符、函数支持列表以及在读未提交和读已提交隔离级别下的差异,帮助开发者在使用Seata时避免常见SQL兼容性问题。

文章目录

    • 前言
  • SQL限制
    • DML语句
  • SQL修饰
  • 函数

前言

以下内容摘自官网

在使用Seata 的时候,对SQL语句还是有很多限制,所以在使用的时候需要格外注意这个问题(较新版本可能已支持)。

SQL限制

Seata 事务目前支持 INSERT、UPDATE、DELETE 三类 DML 语法的部分功能,这些类型都是已经经过Seata开源社区的验证。SQL 的支持范围还在不断扩大,建议在本文限制的范围内使用。

使用限制:

  • 不支持 SQL 嵌套
  • 不支持多表复杂 SQL
  • 不支持存储过程、触发器
  • 不支持批量更新 SQL(新版已支持)

DML语句

本文介绍 DML 语句类型、SQL 实例以及 Seata 是否支持,帮助您在 Seata 更顺畅的使用 SQL。

 

SQL修饰

Seata 的隔离级别默认为读未提交,该模式下本文表中的 select 语句的 SQL 修饰用法都是支持的;使用 for update 代理可以让 Seata 达到读已提交,该模式下 select 语句的用法只能部分支持。
 
 
 

函数

在本文下面的表列出了 DQL 语句和 DML 语句对函数的支持情况。需要注意的是,在 DML 语句中使用函数,不能将其作为主键。

DML语句支持

类型是否支持
CONCAT(string2[,…])是
INSTR(string,substring)是
LCASE(string2)是
LEFT(string2,length)是
LENGTH(string)是
LOAD_FILE(file_name)是
LOCATE(substring,string[,start_position])是
LPAD(string2,length,pad)是
LTRIM(string2)是
REPEAT(string2,count)是
REPLACE(str,search_str,replace_str)是
RPAD(string2,length,pad)是
RTRIM(string2)是
STRCMP(string1,string2)是
SUBSTRING(str,position[,length])是
TRIM([[BOTH\LEADING\TRAILING][padding]FROM]string2)是
UCASE(string2)是
RIGHT(string2,length)是
SPACE(count)是
ABS(number2)是
BIN(decimal_number)是
CEILING(number2)是
CONV(number2,from_base,to_base)是
FLOOR(number2)是
FORMAT(number,decimal_places)是
HEX(DecimalNumber)是
LEAST(number,number2[,…])是
MOD(numerator,denominator)是
POWER(number,power)是
RAND([seed])是
ROUND(number[,decimals])是
SIGN(number2)是
SQRT(number2)是
ADDTIME(date2,time_interval)是
CONVERT_TZ(datetime2,fromTZ,toTZ)是
CURRENT_DATE()是
CURRENT_TIME()是
CURRENT_TIMESTAMP()是
DATE(datetime)是
DATE_ADD(date2,INTERVALd_valued_type)是
DATE_FORMAT(datetime,FormatCodes)是
DATE_SUB(date2,INTERVALd_valued_type)是
DATEDIFF(date1,date2)是
DAY(date)是
DAYNAME(date)是
DAYOFWEEK(date)是
DAYOFYEAR(date)是
EXTRACT(interval_nameFROMdate)是
MAKEDATE(year,day)是
MAKETIME(hour,minute,second)是
MONTHNAME(date)是
NOW()是
SEC_TO_TIME(seconds)是
STR_TO_DATE(string,format)是
TIMEDIFF(datetime1,datetime2)是
TIME_TO_SEC(time)是
WEEK(date_time[,start_of_week])是
YEAR(datetime)是
DAYOFMONTH(datetime) 是
HOUR(datetime)是
LAST_DAY(date)是
MICROSECOND(datetime)是
MONTH(datetime)是
MINUTE(datetime)是
FIRST()否
LAST()否
MIN()否
MAX()否
AVG()否
SUM()否
COUNT()否

DQL语句支持

类型读未提交读已提交
CONCAT(string2[,…])是是
INSTR(string,substring)是是
LCASE(string2)是是
LEFT(string2,length)是是
LENGTH(string)是是
LOAD_FILE(file_name)是是
LOCATE(substring,string[,start_position])是是
LPAD(string2,length,pad)是是
LTRIM(string2)是是
REPEAT(string2,count)是是
REPLACE(str,search_str,replace_str)是是
RPAD(string2,length,pad)是是
RTRIM(string2)是是
STRCMP(string1,string2)是是
SUBSTRING(str,position[,length])是是
TRIM([[BOTH\LEADING\TRAILING][padding]FROM]string2)是是
UCASE(string2)是是
RIGHT(string2,length)是是
SPACE(count)是是
ABS(number2)是是
BIN(decimal_number)是是
CEILING(number2)是是
CONV(number2,from_base,to_base)是是
FLOOR(number2)是是
FORMAT(number,decimal_places)是是
HEX(DecimalNumber)是是
LEAST(number,number2[,…])是是
MOD(numerator,denominator)是是
POWER(number,power)是是
RAND([seed])是是
ROUND(number[,decimals])是是
SIGN(number2)是是
SQRT(number2)是是
ADDTIME(date2,time_interval)是是
CONVERT_TZ(datetime2,fromTZ,toTZ)是是
CURRENT_DATE()是是
CURRENT_TIME()是是
CURRENT_TIMESTAMP()是是
DATE(datetime)是是
DATE_ADD(date2,INTERVALd_valued_type)是是
DATE_FORMAT(datetime,FormatCodes)是是
DATE_SUB(date2,INTERVALd_valued_type)是是
DATEDIFF(date1,date2)是是
DAY(date)是是
DAYNAME(date)是是
DAYOFWEEK(date)是是
DAYOFYEAR(date)是是
EXTRACT(interval_nameFROMdate)是是
MAKEDATE(year,day)是是
MAKETIME(hour,minute,second)是是
MONTHNAME(date)是是
NOW()是是
SEC_TO_TIME(seconds)是是
STR_TO_DATE(string,format)是是
TIMEDIFF(datetime1,datetime2)是是
TIME_TO_SEC(time)是是
WEEK(date_time[,start_of_week])是是
YEAR(datetime)是是
DAYOFMONTH(datetime)是是
HOUR(datetime)是是
LAST_DAY(date)是是
MICROSECOND(datetime)是是
MONTH(datetime)是是
MINUTE(datetime)是是
FIRST()是否
LAST()是否
MIN()是否
MAX()是否
AVG()是否
SUM()是否
COUNT()是否

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: