gpt4 book ai didi

sql - SELECT 的事务隔离级别

转载 作者:太空狗 更新时间:2023-10-30 01:56:11 24 4
gpt4 key购买 nike

给定一个在关系数据库上运行的事务,触发一系列 SELECTS。

我假设如果在此事务的中间,任何其他事务对数据库提交一些更新或插入,则此新数据对于前一个事务中剩余的其余选择是可见的。这个假设是否正确?

我的意思是,我假设事务不是为了读取而隔离的(它总是读取数据库的最后状态,即使它同时发生变化),但仅针对写入,是是吗?

如果这取决于每个 RDBMS 的事务策略,那么 Oracle 的策略是什么?

最佳答案

您的假设是正确的,至少对于 Oracle 而言。

Oracle 保证在给定时刻执行的读取的一致性。一旦读取开始,其他事务是否更改了被选择的数据并不重要——Oracle 保证数据是读取开始时数据库中的数据。如果它不能兑现该保证,您将收到“ORA-01555 快照太旧”错误。但是,后续选择可能不会得到相同的答案。

为了提供读取隔离/可重复读取,您必须放弃一些并发性,因为您必须锁定表以防止更新。 Oracle 选择高并发——读者不阻塞。

如果您只是查找给定时间点的数据,Oracle 确实提供了闪回查询。

关于sql - SELECT 的事务隔离级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8522185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com