首页 > 解决方案 > 同时生成会员号时ID重复

问题描述

我有一个用于捕获新用户信息的地方。我通过获取递增的 last number 来生成成员编号。现在发生的情况是,2 个管理员用户从不同的站点创建了 2 个新用户,两者都获得相同的最后一个 id,当一个试图保存它时,由于第一个管理员用户现在已经用相同的最后一个数字保存了他的用户,所以出现错误。这基本上就是我所做的

id_count 是一个 AI 字段

管理员从前端选择添加用户。

以下查询运行并带回最后一个数字

SELECT id_count FROM members order by id_count DESC Limit 1
member_id = $row['id_count'] +1

现在,如果我有 2 个管理员用户同时执行此操作。两者都获得相同的新会员编号。Admin1 保护他的用户,这很好。现在,当 Admin2 安全信息时,新号码已经存在并且信息不安全。会员号是唯一字段

标签: mysql

解决方案


这称为竞争条件。

在数据库上工作的应用程序应该将此新用户视为还没有 ID(可能在内部使用负用户 ID 或其他)。只有在创建新用户条目时,才会分配最终的永久用户 ID,这是通过自动增量数据库字段完成的,这是一个原子操作。


推荐阅读