1

假设一个方法只从数据库中读取数据而不写入数据。这种方法是否总是不需要在事务中运行?

4

3 回答 3

2

在许多数据库中,从不在显式事务中的数据库读取的请求会隐式创建一个事务来运行该请求。

SELECT在 SQL 数据库中,如果您正在运行多个语句并且您不希望其他事务的更改显示在一个SELECT而不是较早的一个中,则您可能希望使用一个事务。在SERIALIZABLE事务隔离级别上运行的事务将跨多个语句呈现一致的数据视图。

于 2012-06-25T12:03:00.993 回答
1

不。如果您没有阅读特定的隔离级别,您可能无法获得足够的保证。例如,行可能会消失或可能会出现新行。

即使对于单个语句也是如此:

select * from Tab
except select * from Tab

这个查询实际上可以在并发修改的情况下返回行,因为它扫描表两次。

SQL Server:有一种简单的方法可以获得快速、非阻塞、非锁定、一致的读取:启用快照隔离并在快照事务中读取。AFAIK Oracle 也具有此功能。Postgres 也是。

于 2012-06-25T12:13:54.447 回答
0

事务的目的是回滚或提交对数据库所做的操作,如果您只是选择值并且不对数据进行任何更改,则不需要事务。

于 2012-06-25T09:47:02.093 回答