代码之家  ›  专栏  ›  技术社区  ›  Grim Reaper

使用唯一索引与查询数据库

  •  1
  • Grim Reaper  · 技术社区  · 7 年前

    我正在开发中的登录/注册系统 节点。js公司 .

    通常 查询数据库,检查给定的用户名是否已经存在,如果不存在,则创建新用户。

    我最近有了一个想法,在MySQL数据库中使用唯一索引作为用户名。不过我有一些问题。

    • 检查重复项的最有效方法是什么?在数据库中搜索给定的用户名,或者使用唯一索引并从MySQL中捕获错误(如果已经存在)?

    我对MySQL在复制时吐出错误感到不安全,但也许我疯了。

    • 如果我使用唯一索引,对每个唯一值使用它是否仍然有效?例如为用户名、电子邮件等创建唯一索引。?
    2 回复  |  直到 7 年前
        1
  •  1
  •   Arpit Solanki    7 年前

    检查重复项的最有效方法是什么?在数据库中搜索给定的用户名,或者使用唯一索引并从MySQL中捕获错误(如果已经存在)?

    在第一种情况下,您将找到用户名为的用户,然后检查是否找到该用户。所以在这种情况下,您的DB会检查这个用户名,您也会进行一次检查。

    现在考虑第二种情况,其中存在唯一索引。因此,您将数据提供给mysql,它将尝试首先进行检查,然后抛出错误或将数据放入DB中。这样,您就不必再次检查usrname是否已经在DB中。这也将使您免受比赛条件的影响

    如果您担心mysql抛出错误,那么不要担心。mysql将抛出一个完整性错误,您可以捕获并发送适当的响应,如用户名已经存在

        2
  •  0
  •   Guilherme    7 年前

    最好使用唯一索引(在数据库引擎中进行验证),因为这样可以避免线程竞争并确保数据库的完整性。通过选择进行验证是不安全的,不推荐这样做。

    尽管如此,我建议在插入之前使用select进行检查,以便在尝试插入之前通知用户“使用的用户名”。

    使用唯一索引的另一个很好的原因是性能。根据表格的大小,它可以快得多。