假设某个方法只从数据库中读取数据而不写入数据。总是这种方法不需要在事务中运行吗?
答案 0 :(得分:2)
在许多数据库中,从数据库读取的请求(不在显式事务中)隐式创建了一个事务来运行请求。
在SQL数据库中,如果您运行多个SELECT
语句,并且不希望其他事务的更改显示在一个SELECT
中,而不是更早的更改,则可能需要使用事务。在SERIALIZABLE
事务隔离级别运行的事务将在多个语句中呈现一致的数据视图。
答案 1 :(得分:1)
没有。如果您没有在特定的隔离级别读取,则可能无法获得足够的保证。例如,行可能会消失,或者可能会出现新行。
即使是单一陈述也是如此:
select * from Tab
except select * from Tab
此查询实际上可以在并发修改的情况下返回行,因为它会扫描表两次。
SQL Server:有一种简单的方法可以获得快速,无阻塞,非锁定,一致的读取:启用快照隔离并读取快照事务。 AFAIK Oracle也具有此功能。 Postgres也是。
答案 2 :(得分:0)
事务的目的是回滚或提交对数据库执行的操作,如果您只是选择值并且不对数据进行任何更改则不需要事务。