Yve*_* M. 5 amazon-web-services sqltransaction mysql-5.6 aws-aurora-serverless aws-rds-data-service
我不确定如何在多个SELECT
查询中实现一致的读取。
我需要运行多个SELECT
查询并确保它们之间没有UPDATE
,DELETE
或者CREATE
已经改变了整体一致性。对我来说最好的情况当然是非阻塞的东西。
我将 MySQL 5.6 与 InnoDB 和默认REPEATABLE READ
隔离级别一起使用。
问题是当我将 RDS DataServicebeginTransaction
与多个executeStatement
(使用提供的transactionId
)一起使用时。调用commitTransaction
.
该commitTransaction
只为我提供了一个{ transactionStatus: 'Transaction Committed' }
..
我不明白,提交事务函数不是应该给我整个(我的许多SELECT
)数据集结果吗?
相反,即使有transactionId
,每个人 executeStatement
都会返回我个人的结果......这种行为显然不一致..
SELECT
在一笔交易中使用 s 时,您REPEATABLE READ
应该看到相同的数据,并且看不到其他交易所做的任何更改。是的,数据可以由其他事务修改,但是在事务中您对视图进行操作时看不到更改。所以是一致的。
为了确保在选择之间没有实际更改数据,唯一的方法是锁定表/行,即使用SELECT FOR UPDATE
- 但情况不应该如此。事务应该短/快并且锁定表/防止更新,而某些长时间运行的选择链显然不是一个选项。
针对数据库发出的查询在发出时运行。查询的结果在提交之前将保持未提交状态。如果查询的目标资源是另一个事务已获取锁定的资源,则查询可能会被阻止。如果另一个事务修改资源导致冲突,查询可能会失败。
事务隔离会影响如何处理同时发生的该事务和其他事务的影响。维基百科
通过隔离级别REPEATABLE READ
(顺便说一句,Aurora MySQL 的 Aurora 副本始终用于 InnoDB 表上的操作),您可以对数据库的读取视图进行操作,并且只能看到BEGIN
事务之前提交的数据。
这意味着SELECT
一个事务中的 s 将看到相同的数据,即使其他事务进行了更改。
相比之下,在事务隔离级别下,READ COMMITTED
一个事务中的后续选择可能会看到不同的数据——这些数据是由其他事务在它们之间提交的。
归档时间: |
|
查看次数: |
647 次 |
最近记录: |