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

悲观控制

在这里,我们被告知要使用交易。

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


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

最佳答案

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

Table level Locking and Row Level Locking:

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

更新:

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

关于mysql - 悲观与乐观并发控制实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38910470/

10-13 06:06