【问题标题】:Where can I find a good introduction on SQL locking and transaction strategies我在哪里可以找到关于 SQL 锁定和事务策略的好介绍
【发布时间】: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


【解决方案1】:

Q&A from Chas Boyd

Kalen Delaney article

当然还有good old BOL

对于 SQL 2008,您可能可以使用MERGE 来实现在一个 transaction.safe 语句中的更新和插入。 我还没有使用它,所以我会做其中之一: - 事后检查的触发器(所以它在同一个事务中) - 用于 MERGE 的 TABLOCKX 锁定

不过,在这种情况下,check this thread(当然还有my answer :)

【讨论】:

    【解决方案2】:

    如果您真的需要了解锁和事务在 SQL Server 中的工作原理,我认为最好的选择是了解 SQL Server 引擎内部的工作原理。

    我发现《深入了解 Microsoft® SQL Server® 2008:T-SQL 编程》一书是最全面的指南。

    “处理事务、并发和错误处理”部分应该可以帮助您解决您遇到的具体问题。

    但是我发现我从本书的所有部分中都学到了一些小知识,所有这些都让我在处理 SQL Server 时变得更轻松了。

    我知道现在买一本纸质书似乎有点怀旧,但我会推荐这本,因为我发现很难在网上获得全面的指南!

    【讨论】:

      【解决方案3】:

      您需要深入了解产品特定文档才能理解这一点。

      它是特定于产品的,适用于一种数据的方法不适用于另一种数据。也就是说,在大多数情况下,仔细选择隔离级别就足够了,只有当你开始真正推动事情时,才需要更多地使用查询提示。

      对于 SQL Server,“Inside SQL Server 2000”(MSPress) 是我获得足够详细信息的地方,大多数时候我不需要那种详细程度的细节(并且还与具有数十年 Oracle 专业知识的人一起工作)。

      【讨论】:

      • @Brann(并由 dove 编辑):不,我使用的这本书是针对 SQL Server 2000 的。我希望会有更多最新版本,但这并没有改变我第一次了解到这一点的地方.
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      相关资源
      最近更新 更多