开发者社区 问答 正文

SQL 修饰怎么实行?


GTS 的隔离级别默认为读未提交,该模式中下表 select 语句的 SQL 修饰用法都是支持的;使用 hint 可以让 GTS 达到读已提交,该模式下 select 语句的用法只能部分支持,具体的支持强度如下表所示。
GTS 的读 hint 为:/ +txc({ ‘LEVEL’:’READCOMMITED’})/,用法举例如下:/ +txc({ ‘LEVEL’:’READCOMMITED’})/select name from tb where id =1;

DML语句支持

类型SQL 实例是否支持
AND & ORUPDATE … WHERE col_name1=expr1 AND col_name2= expr2
LIKEUPDATE … WHERE col_name1 LIKE ‘NE’
通配符UPDATE … WHERE col_name1 LIKE ‘NE%’
BETWEENUPDATE … WHERE col_name1 BETWEEN expr1 AND expr2
ON DUPLICATEINSERT INTO tb1_name [(col_name,…)]VALUES ({expr | DEFAULT},…),(…),…[ ON DUPLICATE KEY UPDATEcol_name=expr, … ]


SQL 语句支持

类型SQL 实例读未提交读已提交
AND & ORSELECT * FROM tb1_name WHERE col_name1=expr1 AND col_name2= expr2
ORDER BYSELECT col_name1, col_name2 FROM tb1_name ORDER BY col_name1
GROUP BYSELECT col_name1, col_name2 FROM tb1_name GROUP BY col_name1
LIKESELECT col_name1, col_name2 FROM tb1_name WHERE col_name1 LIKE ‘NE’
通配符SELECT col_name1, col_name2 FROM tb1_name WHERE col_name1 LIKE ‘NE%’
EXISTSSELECT col_name1, col_name2 FROM tb1_name WHERE EXISTS (expr1)
INSELECT col_name1, col_name2 FROM tb1_name WHERE col_name1 IN (expr1, expr2,…)
BETWEENSELECT col_name1, col_name2 FROM tb1_name WHERE col_name1 BETWEEN expr1 AND expr2
ON DUPLICATEINSERT INTO tb1_name [(col_name,…)]VALUES ({expr | DEFAULT},…),(…),…[ ON DUPLICATE KEY UPDATE col_name=expr, … ]
ALIASESSELECT t1. col_name1, t2.col_name2FROM tb1_name AS t1, tb2_name AS t2WHERE t1. col_name=expr AND t2. col_name=expr
TOPSELECT TOP 2 * FROM tb1_name
LIMITSELECT col_name1, col_name2 FROM tb1_name LIMIT 5
  • JOIN
  • INNER JOIN
  • LEFT JOIN
  • RIGHT JOIN
  • FULL JOIN
SELECT col_name1, col_name2FROM tb1_nameJOIN tb2_name>ON tb1_name. col_name1= tb2_name. col_name1
  • UNION
  • UNION ALL
  • SELECT INTO
SELECT col_name1, col_name2 FROM tb1_nameUNIONSELECT col_name1, col_name2 FROM tb2_name

展开
收起
猫饭先生 2017-10-31 11:33:13 1664 分享 版权
阿里云 AI 助理回答

在阿里云的Global Transaction Service (GTS)中,确实提供了对事务隔离级别的支持,以满足不同场景下的数据一致性和并发处理需求。您提到的读未提交(Read Uncommitted)是GTS的默认隔离级别,在这个级别下,事务可以读取到其他事务尚未提交的数据,这可能会导致脏读现象。

为了达到更高的数据一致性,可以通过使用Hint来设置GTS的事务为读已提交(Read Committed)模式,这样事务只能读取到已经提交的数据,避免了脏读问题。您给出的示例txc({ 'LEVEL':'READCOMMITED' })正是用来开启读已提交模式的Hint用法。

关于DML(Data Manipulation Language,数据操作语言)语句的支持情况,当采用读已提交模式时,并非所有SQL语法都能得到支持。具体来说:

  • SELECT 语句:在读已提交模式下,大多数标准的SELECT查询都是支持的,但可能不包括一些特定的查询优化器策略或复杂查询功能,因为这些可能与事务隔离级别的限制冲突。
  • INSERTUPDATEDELETE:这些修改数据的DML语句通常不受事务隔离级别影响,主要关注的是事务的原子性、一致性和持久性,而读已提交模式主要影响的是查询行为,所以这些操作应该是被普遍支持的。
  • AND/OR条件:在任何隔离级别下,逻辑运算符如AND、OR用于WHERE子句中进行条件组合是标准SQL的一部分,应被广泛支持,无论是否使用了读已提交Hint。它们不会直接与事务隔离级别相关联,而是影响查询的逻辑表达。

如果需要了解更详细的SQL支持情况,建议查阅阿里云GTS的官方文档,那里会有最新的兼容性说明和最佳实践指导,帮助您更好地应用GTS于您的业务场景中。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
SQL
问答地址: