前一篇我们探讨了自动锁,但有时我们觉得自动锁不符合我们的要求,比如:
代码执行顺序为:
如果不加干扰,执行顺序也是和代码顺序一样的。但是由于有特别需求,我们期望在数据库管理系统中执行顺序为:
也就是说事务 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