【问题标题】:Duplicate ID when generating member numbers at the same time同时生成会员号时ID重复
【发布时间】:2018-12-09 09:00:53
【问题描述】:

我有一个用于捕获新用户信息的地方。我通过获取递增的 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


    【解决方案1】:

    这称为竞争条件。

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

    【讨论】:

    • 好的,我决定只在用户单击保存按钮后生成 ID。 2个用户同时点击保存的几率更大。
    • @TheWizard 即使是这种情况也可以(并且应该)处理。如果你通过DB的方式来做,它会在插入记录的同时生成ID,然后可以查询生成的ID。在stackoverflow.com/a/7501531/296974stackoverflow.com/a/7738037/296974 下查看我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2019-08-13
    • 1970-01-01
    相关资源
    最近更新 更多