1

建议的副本没有回答标题中的问题。

我想锁定一个表,这样它就不能被写入,但可以被读取。那可能吗?

与 的交易中会发生这种情况IsolationLevel.Serializable吗?还是仅适用于受影响的行?(这也是对读取的锁定吗?)

如果重要的话:我在 C# 中执行此操作。

4

3 回答 3

0

您应该在表上创建一个 UNIQUE 约束。即使您设法通过第一个进程锁定表,另一个进程很可能只会被阻塞,直到第一个进程存在。

然后,您可能会开始摆弄超时以确保第二个进程在访问表之前超时,并且您将自己打开一个痛苦的世界。

迄今为止,涵盖构成重复的任何字段的唯一约束是您的最佳选择 - 并将确保不输入任何重复项,据我了解,这是您的最终目标(以及详细的评论)。

于 2013-04-16T17:04:15.677 回答
-1

不,它不可能。

只有持有锁的会话才能访问该表。在释放锁之前,没有其他会话可以访问它。

参考以下链接:

http://msdn.microsoft.com/en-gb/library/ms173763.aspx

于 2013-04-16T08:51:15.730 回答
-1

您可能想寻找 NOLOCK / ReadUncommitted 选项:http ://www.mssqltips.com/sqlservertip/2470/understanding-the-sql-server-nolock-hint/

它可以让您从当前锁定的表中读取数据,但请注意其含义:您最终可能会读取“幽灵”数据,即在事务中已插入然后回滚的数据。

于 2013-04-16T09:03:16.487 回答