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