【发布时间】:2011-06-12 10:26:50
【问题描述】:
我正在开发一个相对简单的自定义 Web 应用程序,后端有一个 MySQL MyISAM 数据库。不知何故,我想避免经典的并发覆盖问题,例如用户 A 覆盖了用户 B 的编辑,因为 B 在 A 完成之前加载并提交了一些编辑表单。
这就是为什么我想在显示编辑表单时以某种方式锁定一行。不过……
- 正如我所说,我使用的是 MyISAM,据我所知,它不支持行级锁。另外,我不确定是否建议将“真正的”MySQL 锁保持几分钟。
- 我对事务了解不多,但据我所见,它们似乎打算在一个连接中使用。
- 使用像 Git 这样的某种冲突合并系统确实不是一种选择。
行将保持锁定几分钟。并发性非常低:任何时候都有六个用户在使用该应用程序。
我现在正计划使用一个表格,其中包含有关用户在做什么以及从何时开始的详细信息。然后,该应用程序可以决定在其他用户最近打开它时不显示编辑表单(例如正在处理它)。这个假锁将在保存表单时被删除。
这行得通吗?我应该怎么做才能避免死锁、活锁和所有这些东西?
【问题讨论】:
标签: mysql concurrency locking locks