事务与锁的探讨-人工锁

作者:vkvi 来源:千一网络(原创) 日期:2016-10-20

前一篇我们探讨了自动锁,但有时我们觉得自动锁不符合我们的要求,比如:

代码执行顺序为:

  1. 事务 A 读取记录
  2. 事务 B 更新同一记录
  3. 事务 A 更新同一记录

如果不加干扰,执行顺序也是和代码顺序一样的。但是由于有特别需求,我们期望在数据库管理系统中执行顺序为:

  1. 事务 A 读取记录
  2. 事务 A 更新同一记录
  3. 事务 B 更新同一记录

也就是说事务 B 更新绝对不能位于事务 A 读取事务 A 更新之间。

那就在第 1 步的读取记录 SQL 语句加上锁标志,用 WITH,示例如下:

选择不同的锁,会达到不同的效果,比如如果我们使用 WITH(TABLOCKX),则事务 B 不光是 update,就连 select 都会等待。

请参阅:行级锁为什么锁住了整个表?

另:WITH 要放在 WHERE 之前。

关于锁更多信息请参见:https://msdn.microsoft.com/zh-cn/library/ms187373.aspx

这篇写得也不错:http://m.blog.csdn.net/article/details?id=4047191

你前面那位网友看了:Microsoft Web Platform Installer

▲▲▲嘿,欢迎转载传播本站原创文章,尽量保留来源噢。▲▲▲

文章评论
标题:必填
内容:
vkvi
vkvi

作者简介: vkvi,致力于 .NET Web 开发、移动开发的技术推广,在 .NET、SQL Server、Windows Server 等方面有深入研究和丰富经验,10 年间共计撰写文章 4000 余篇。 主持金融、国土、农业、电商等多个行业项目执行, 推行“技术提升生产力、人心决定成功率”的管理理论。 联系他