作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经用简单的英语理解了这两种并发控制的工作原理。然而我更感兴趣的是如何在代码中完成悲观控制。这是我的感受,假设两个用户正在尝试更新 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:
但请记住,如果您有多个用户,锁定可能会导致死锁。使用并发时需要考虑很多事情。祝你好运!
更新:
由于锁定可能会导致死锁和其他并发问题,因此您可以实现 checkin 和 checkout 功能,其中当用户 checkout 某些记录时,它将阻止其他用户查看相同的记录。
关于mysql - 悲观与乐观并发控制实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38910470/
我正在编写一个 Web 应用程序,两个不同的用户可以在其中更新事物列表,例如待办事项列表。我已经意识到,乐观锁定机制效果最好,因为我不希望出现高争用情况。 我一直在查看事务隔离级别,现在我有点困惑。看
我是一名优秀的程序员,十分优秀!