我已经了解这两种并发控制如何以简单的英语工作。然而,我更感兴趣的是如何在代码中进行悲观控制。这是我的感受,假设有两个用户正在尝试更新一个 wiki 文档
悲观控制
在这里,我们被告知要使用事务。
BEGIN
SELECT DOC FROM WIKI WHERE DOC_ID = 1;
/* business logic */
UPDATE WIKI SET DOC = INPUT WHERE DOC_ID = 1;
END
但是,这仍然容易覆盖以前的更新。我觉得必须在事务中进行第二次检查,以查看在 select 语句之后是否发生了任何写入,如果是,则回滚或提交。我对么?