FreeSql 中用于 SQL Server 的锁定选项枚举说明
示例:
FreeSql.Select
FreeSql.Select
-
NoLock (1)
- sql: SELECT TOP 1 ... FROM [tableName] WITH (NOLOCK)
- 最低隔离级别,允许读取未提交数据
- 完全忽略锁机制,可能读到脏数据,但性能最好
-
HoldLock (2)
- sql: SELECT TOP 1 ... FROM [tableName] WITH (HOLDLOCK)
- 持有共享锁直到事务结束
- 防止其他事务修改已读取的数据
-
UpdLock (4)
- sql: SELECT TOP 1 ... FROM [tableName] WITH (UPDLOCK)
- 获取更新锁
- 防止其他事务修改数据,但允许读取
-
RowLock (8)
- sql: SELECT TOP 1 ... FROM [tableName] WITH (ROWLOCK)
- 行级锁定
- 最细粒度的锁定方式
-
ReadCommitted (16)
- sql: SELECT TOP 1 ... FROM [tableName] WITH (READCOMMITTED)
- 只读取已提交的数据
- 防止脏读
-
ReadPast (32)
- sql: SELECT TOP 1 ... FROM [tableName] WITH (READPAST)
- 跳过被锁定的行
- 用于读取未被锁定的行
-
ReadUnCommitted (64)
- sql: SELECT TOP 1 ... FROM [tableName] WITH (READUNCOMMITTED)
- 允许读取未提交数据
- 功能类似于 NoLock
-
RepeaTableRead (256)
- sql: SELECT TOP 1 ... FROM [tableName] WITH (REPEATABLEREAD)
- 可重复读
- 确保在事务期间读取的数据不会改变
-
PagLock (512)
- sql: SELECT TOP 1 ... FROM [tableName] WITH (PAGLOCK)
- 页级锁定
- 锁定整个数据页
-
Serializable (1024)
- sql: SELECT TOP 1 ... FROM [tableName] WITH (SERIALIZABLE)
- 最高隔离级别
- 完全串行化访问
-
TabLock (2048)
- sql: SELECT TOP 1 ... FROM [tableName] WITH (TABLOCK)
- 表级锁定
- 锁定整个表
-
TabLockX (4096)
- sql: SELECT TOP 1 ... FROM [tableName] WITH (TABLOCKX)
- 排他表锁
- 独占整个表的访问
-
XLock (8192)
- sql: SELECT TOP 1 ... FROM [tableName] WITH (XLOCK)
- 排他锁
- 防止其他事务读取或修改数据
-
NoWait (16384)
- sql: SELECT TOP 1 ... FROM [tableName] WITH (NOWAIT)
- 如果无法立即获取锁则返回错误
- 不等待锁的释放
参考:https://freesql.net/guide/select.html#sqlserver-withlock-withindex
浙公网安备 33010602011771号