建议的副本没有回答标题中的问题。
我想锁定一个表,这样它就不能被写入,但可以被读取。那可能吗?
与 的交易中会发生这种情况IsolationLevel.Serializable
吗?还是仅适用于受影响的行?(这也是对读取的锁定吗?)
如果重要的话:我在 C# 中执行此操作。
建议的副本没有回答标题中的问题。
我想锁定一个表,这样它就不能被写入,但可以被读取。那可能吗?
与 的交易中会发生这种情况IsolationLevel.Serializable
吗?还是仅适用于受影响的行?(这也是对读取的锁定吗?)
如果重要的话:我在 C# 中执行此操作。
您应该在表上创建一个 UNIQUE 约束。即使您设法通过第一个进程锁定表,另一个进程很可能只会被阻塞,直到第一个进程存在。
然后,您可能会开始摆弄超时以确保第二个进程在访问表之前超时,并且您将自己打开一个痛苦的世界。
迄今为止,涵盖构成重复的任何字段的唯一约束是您的最佳选择 - 并将确保不输入任何重复项,据我了解,这是您的最终目标(以及详细的评论)。
不,它不可能。
只有持有锁的会话才能访问该表。在释放锁之前,没有其他会话可以访问它。
参考以下链接:
您可能想寻找 NOLOCK / ReadUncommitted 选项:http ://www.mssqltips.com/sqlservertip/2470/understanding-the-sql-server-nolock-hint/
它可以让您从当前锁定的表中读取数据,但请注意其含义:您最终可能会读取“幽灵”数据,即在事务中已插入然后回滚的数据。