如何解决我应该在MySQL中使用自定义的“锁”表吗?
| 我正在开发一个相对简单的自定义Web应用程序,该应用程序的后端是MysqL MyISAM数据库。我想以某种方式避免经典的并发覆盖问题,例如用户A覆盖用户B \的编辑,因为B在A完成之前加载并提交了一些编辑表单。 这就是为什么我想以某种方式在显示编辑表单时锁定一行。然而... 正如我所说,我正在使用MyISAM,据我所知,它不支持行级锁。另外,我不确定是否建议保持“真实” MysqL锁定几分钟。 我对交易并不是很了解,但是从我所看到的来看,它们似乎应该在一个连接中使用。 使用某种类似Git的冲突合并系统确实不是一种选择。 行将保持锁定状态几分钟。并发性非常低:随时有六十个用户使用该应用程序。 我现在计划使用一个表,其中包含有关哪个用户在做什么以及从什么时候开始的详细信息。然后,该应用可以决定在其他用户最近打开它(例如正在使用它)时不显示该编辑表单。保存表单时,该假锁将被删除。 这行得通吗?我应该怎么做才能避免出现死锁,活锁和其他所有问题?解决方法
您可以实现锁定,最简单的方法可能是在要锁定的数据中添加两个字段(lock_created Datetime,locked_by int)。然后在编辑页面上(可能还有编辑按钮上)检查是否已更新(lock_created + lock_interval)冲突。
有人没有提交他们的数据。如果将锁设置为过期,则无法解决该问题。 (如果您不这样做,则可以永远保留锁。)
您只能确定哪个优先级高(使用Bob所创建的新锁可能最简单),并通知另一个页面已过期,并且数据不会累加,然后将其交还给他们以进行重做。
有关表结构的注释:您可以使用字段“ table_name,row_id,lock_created,locked_by \”创建表“ locks”,但这可能不是最简单的方法,因为联接可变表名很复杂和令人困惑。同样,可能没有用一个位置来存储所有锁。对于简单的机制,我认为向要实现锁定机制的每个表添加统一字段更加容易。
, 在这种情况下,您绝对不应该使用行级锁。
您可以使用乐观锁定,这基本上意味着每行都有一个版本字段,当保存行时该字段会增加。保存之前,请确保版本字段与加载行时的版本字段相同,这意味着自您读取该行以来,没有其他人保存任何内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。