首页 > 解决方案 > max+1 无干扰

问题描述

当将一行添加到我的表中时,我需要某个列的值为 max+1。这不是自动增量情况,因为它仅在表中的一组行内。换句话说,选择某些行时,这些行的最大值是要确定我添加的下一行,而不是整个表的最大值。所以可以有超过 1 行具有相同的值,在我选择的 x 行中不超过 1 行。

这是它们被添加的时候。这些值也可以稍后通过表单手动更改,并且仍然需要在该集合中保持唯一(当然这很容易)。

这里的问题是,由于在检查最大值和更新它之间存在微小的延迟,从技术上讲,即使这在我使用它的几年中没有发生过,第二个用户“可能”出现并获得相同的最大值值,在原始用户的选择和更新之间。

我宁愿不必锁定表格,而且我正在使用的框架没有内置事务。只是好奇是否有人有其他想法。

我的一个想法是锁定方法本身......当有人使用它时,向数据库添加一个临时行,然后检查它,如果存在,让第二个用户基本上重定向到同一页面,直到该行删除。但是那里涉及很多额外的数据库工作,所以我不知道......

当有限制时,同样的问题也会出现。假设只有 50 人可以添加一行,49 人已添加,2 名成员在选择和更新之间都可以得到相同的 49,并被允许进入。

标签: phpmysql

解决方案


推荐阅读