FreeSql 中用于 SQL Server 的锁定选项枚举说明

示例:
FreeSql.Select().WithLock(SqlServerLock.ReadPast)
FreeSql.Select().WithLock(SqlServerLock.ReadPast | SqlServerLock.NoLock)

  1. NoLock (1)

    • sql: SELECT TOP 1 ... FROM [tableName] WITH (NOLOCK)
    • 最低隔离级别,允许读取未提交数据
    • 完全忽略锁机制,可能读到脏数据,但性能最好
  2. HoldLock (2)

    • sql: SELECT TOP 1 ... FROM [tableName] WITH (HOLDLOCK)
    • 持有共享锁直到事务结束
    • 防止其他事务修改已读取的数据
  3. UpdLock (4)

    • sql: SELECT TOP 1 ... FROM [tableName] WITH (UPDLOCK)
    • 获取更新锁
    • 防止其他事务修改数据,但允许读取
  4. RowLock (8)

    • sql: SELECT TOP 1 ... FROM [tableName] WITH (ROWLOCK)
    • 行级锁定
    • 最细粒度的锁定方式
  5. ReadCommitted (16)

    • sql: SELECT TOP 1 ... FROM [tableName] WITH (READCOMMITTED)
    • 只读取已提交的数据
    • 防止脏读
  6. ReadPast (32)

    • sql: SELECT TOP 1 ... FROM [tableName] WITH (READPAST)
    • 跳过被锁定的行
    • 用于读取未被锁定的行
  7. ReadUnCommitted (64)

    • sql: SELECT TOP 1 ... FROM [tableName] WITH (READUNCOMMITTED)
    • 允许读取未提交数据
    • 功能类似于 NoLock
  8. RepeaTableRead (256)

    • sql: SELECT TOP 1 ... FROM [tableName] WITH (REPEATABLEREAD)
    • 可重复读
    • 确保在事务期间读取的数据不会改变
  9. PagLock (512)

    • sql: SELECT TOP 1 ... FROM [tableName] WITH (PAGLOCK)
    • 页级锁定
    • 锁定整个数据页
  10. Serializable (1024)

    • sql: SELECT TOP 1 ... FROM [tableName] WITH (SERIALIZABLE)
    • 最高隔离级别
    • 完全串行化访问
  11. TabLock (2048)

    • sql: SELECT TOP 1 ... FROM [tableName] WITH (TABLOCK)
    • 表级锁定
    • 锁定整个表
  12. TabLockX (4096)

    • sql: SELECT TOP 1 ... FROM [tableName] WITH (TABLOCKX)
    • 排他表锁
    • 独占整个表的访问
  13. XLock (8192)

    • sql: SELECT TOP 1 ... FROM [tableName] WITH (XLOCK)
    • 排他锁
    • 防止其他事务读取或修改数据
  14. NoWait (16384)

    • sql: SELECT TOP 1 ... FROM [tableName] WITH (NOWAIT)
    • 如果无法立即获取锁则返回错误
    • 不等待锁的释放

参考:https://freesql.net/guide/select.html#sqlserver-withlock-withindex

posted on 2025-03-21 18:28  鱼歌  阅读(48)  评论(0)    收藏  举报

导航