如何使用 AWS RDS DataService (Aurora Serverless) 跨多个 SELECT 实现一致读取

Yve*_* M. 5 amazon-web-services sqltransaction mysql-5.6 aws-aurora-serverless aws-rds-data-service

我不确定如何在多个SELECT查询中实现一致的读取。

我需要运行多个SELECT查询并确保它们之间没有UPDATEDELETE或者CREATE已经改变了整体一致性。对我来说最好的情况当然是非阻塞的东西。

我将 MySQL 5.6 与 InnoDB 和默认REPEATABLE READ隔离级别一起使用。

问题是当我将 RDS DataServicebeginTransaction与多个executeStatement(使用提供的transactionId)一起使用时。调用commitTransaction.

commitTransaction只为我提供了一个{ transactionStatus: 'Transaction Committed' }..

我不明白,提交事务函数不是应该给我整个(我的许多SELECT)数据集结果吗?

相反,即使有transactionId,每个人 executeStatement都会返回我个人的结果......这种行为显然不一致..

Ole*_*kin 1

SELECT在一笔交易中使用 s 时,REPEATABLE READ应该看到相同的数据,并且看不到其他交易所做的任何更改。是的,数据可以由其他事务修改,但是在事务中您对视图进行操作时看不到更改。所以是一致的。

为了确保在选择之间没有实际更改数据,唯一的方法是锁定表/行,即使用SELECT FOR UPDATE- 但情况不应该如此。事务应该短/快并且锁定表/防止更新,而某些长时间运行的选择链显然不是一个选项。


针对数据库发出的查询在发出时运行。查询的结果在提交之前将保持未提交状态。如果查询的目标资源是另一个事务已获取锁定的资源,则查询可能会被阻止。如果另一个事务修改资源导致冲突,查询可能会失败。

事务隔离会影响如何处理同时发生的该事务和其他事务的影响。维基百科

通过隔离级别REPEATABLE READ顺便说一句,Aurora MySQL 的 Aurora 副本始终用于 InnoDB 表上的操作),您可以对数据库的读取视图进行操作,并且只能看到BEGIN事务之前提交的数据。

这意味着SELECT一个事务中的 s 将看到相同的数据,即使其他事务进行了更改。

相比之下,在事务隔离级别下,READ COMMITTED一个事务中的后续选择可能会看到不同的数据——这些数据是由其他事务在它们之间提交的。