SQL Server 是否将事务用于选择语句?

wdebmtf2  于 2023-01-16  发布在  其他
关注(0)|答案(3)|浏览(96)

我不经常使用存储过程,我想知道将选择查询 Package 在事务中是否有意义。
我的过程有三个简单的选择查询,其中两个使用第一个的返回值。

wrrgggsh

wrrgggsh1#

在一个高度并发的应用程序中,(理论上)可能会发生在第一个选择中读取的数据在其他选择执行之前被修改的情况。
如果在你的应用程序中可能会出现这种情况,你应该使用一个事务来 Package 你的选择,但是要确保你选择了正确的isolation level,不是所有的事务类型都能保证一致的读取。

    • 更新**:你可能也会发现this article在并发更新/插入解决方案(又名upsert)上的有趣之处,它测试了upsert的几种常用方法,看看哪种方法真正 * 保证 * 了数据在select和下一条语句之间不会被修改,我得说,结果令人震惊。
uelo1irk

uelo1irk2#

事务通常在您有CREATEUPDATEDELETE语句,并且希望具有原子行为(即,* 提交所有内容或不提交任何内容 *)时使用。

但是,您可以使用READ select语句的事务来执行以下操作:

确保在执行选择查询串时,没有其他人可以更新感兴趣的表。

看看这个msdn post

46scxncf

46scxncf3#

大多数数据库运行事务中的每一个查询,即使没有指定它也是隐式 Package 的。这包括select语句。
PostgreSQL实际上将每个SQL语句都视为在事务中执行。如果您不发出开始命令,则每个单独的语句都有一个隐式的BEGIN和(如果成功)COMMIT环绕。由BEGIN和COMMIT环绕的一组语句有时被称为事务块。
https://www.postgresql.org/docs/current/tutorial-transactions.html

相关问题