【发布时间】:2010-10-10 05:14:43
【问题描述】:
我使用锁和事务有点像第一次尝试编写多线程 c++ 服务器的 VBA excel 程序员...
我曾尝试向我的同事征求意见,但尽管我们在设计复杂数据库、编写快速高效的查询、在需要时使用索引和约束等方面都非常出色(或者我们认为) ,我们没有人对这个主题有很好的了解。
我找到的所有在线资源要么是语法参考,要么是解释事务以“begin tran”开始并以提交或回滚结束的虚拟教程。
我也浏览过 SO 没有成功。
我正在寻找的是一个简单的现实世界问题的列表,以及解决这些问题的正确方法。
例子:
假设我有一个包含一个活动位列的表,并且我不想同时有两个活动行。当然,很多进程可以尝试同时插入数据。
- 我应该锁定整张桌子吗?
- 或者可能使用数据约束,以便插入第二个“活动”行将失败?
- 还是使用具有可重复读隔离级别的事务?
-
或者写:
更新 tbFoo 设置 Active=0 insert into tbFoo (foo, Active) select 'foo',1 where not exists (select * from tbFoo where Active=1)
请不要评论/回答这个具体问题和我的愚蠢建议。我只是想指出我没有线索的事实:)
我在哪里可以找到一些关于简单但相关的锁定情况的很好的演练?如果有所作为,我使用的是 SQL Server 2008
我也很想知道其他人在这个话题上是否和我有同样的感觉。
【问题讨论】:
标签: sql sql-server transactions locking