sql-server - DB锁需要事务吗?

标签 sql-server transactions isolation-level read-committed-snapshot

“无论事务如何,每个语句(选择/插入/删除/更新)都具有隔离级别”是真的吗?

我有一个场景,我在事务中设置了语句更新(ReadCommitted)。
另一个不在事务中的集合(选择语句)。

  • 在这种情况下,当第一组正在执行另一个等待时。
  • 如果我为 DB 死锁设置了 READ_COMMITTED_SNAPSHOT。
    ALTER DATABASE Amelio SET ALLOW_SNAPSHOT_ISOLATION ON
    ALTER DATABASE Amelio SET READ_COMMITTED_SNAPSHOT ON
    

  • 要解决这个问题,是否需要在 TransactionScope 中放置“Select”语句?

    最佳答案

    在 SQL Server 上,每个事务都有一个隐式或显式的事务级别。如果使用 BEGIN/COMMIT/ROLLBACK TRANSACTION 调用则显式, 如果没有发出类似的内容,则隐式。

    在更新查询开始之前启动您的快照。否则,SQL Server 没有机会将更改的行准备到 tempdb 中,并且更新查询仍然打开锁。

    另一种不创建快照隔离的方法是使用 SELECT <columns> FROM <table> WITH (NOLOCK)这是告诉 SQL Server 无论如何都要获取行的方法(又名 READ_UNCOMMITED)。由于它是查询提示,因此即使使用您的设置,它也会更改隔离级别。如果您不担心查询行的哪个状态,则可以工作 - 但是在评估收到的数据时需要谨慎。

    关于sql-server - DB锁需要事务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2205231/

    相关文章:

    sql-server - Sql Server( Entity Framework ): created_at , Updated_at 列

    sql - 行入列并分组

    sql-server - 带有 Oracle 11g 的 SSIS CDC

    java - 带参数的Spring编程事务

    transactions - 如果@@Trancount > 0 不起作用

    mysql - ReadUncommited 能否知道所有将存在的 LOWER 自增 ID?

    sql-server - 更新sql server日期时间字段

    ruby-on-rails-3 - RAILS 3- Controller 中的交易

    select - 如何将 FOR UPDATE 添加到 cakephp3 查询?

    sql - 关于数据库事务中不同隔离级别的一些说明?