mysql - 同时生成会员号时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 安全信息时,新号码已经存在并且信息不安全。会员号是唯一字段
解决方案
这称为竞争条件。
在数据库上工作的应用程序应该将此新用户视为还没有 ID(可能在内部使用负用户 ID 或其他)。只有在创建新用户条目时,才会分配最终的永久用户 ID,这是通过自动增量数据库字段完成的,这是一个原子操作。
推荐阅读
- wordpress - Wordpress post__not_in 不能在 WP_Query 循环中工作
- json - Deserialize JSON object which has property name as number into a object in VB.NET
- phalcon - Phalcon PHP 3.4 文档和教程是否有 github repo 版本、分支或标签?
- jquery - 如何完成一次向一个项目添加类(WayPoints)
- javascript - 如何修复 undefined is not an object on setState in react native
- python - 对存储元组列表的字典中的值求和
- python - 根据 Pandas df 另一列中的最大值删除重复行
- c# - 将图片框声明为单个对象并更改其位置
- javascript - forEach 循环不会更新 Object 值
- linux - 如何将多行从最低值排序到最高值?