0

我已经了解这两种并发控制如何以简单的英语工作。然而,我更感兴趣的是如何在代码中进行悲观控制。这是我的感受,假设有两个用户正在尝试更新一个 wiki 文档

悲观控制

在这里,我们被告知要使用事务。

BEGIN
     SELECT DOC FROM WIKI WHERE DOC_ID = 1;
     /* business logic */
     UPDATE WIKI SET DOC = INPUT WHERE DOC_ID = 1;
END

但是,这仍然容易覆盖以前的更新。我觉得必须在事务中进行第二次检查,以查看在 select 语句之后是否发生了任何写入,如果是,则回滚或提交。我对么?

4

1 回答 1

1

您有两种并发选择(悲观):

表级锁定和行级锁定:

但请记住,如果您有多个用户,锁定可能会导致死锁。使用并发时需要考虑很多事情。祝你好运!

更新:

由于锁定可能导致死锁和其他并发问题,您可以实现签入和签出功能,当用户签出某些记录时,它将阻止其他用户签出相同的记录。

于 2016-08-12T05:25:53.420 回答