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

时间:2018-02-26 14:49:31

标签: mysql node.js database

我正在 node.js 中使用登录/注册系统。

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

我最近得到了一个想法,即在MySQL数据库中使用Unique Index作为用户名。我有一些问题。

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

我觉得MySQL在发生重复时会出错,但我可能只是疯了。

  • 如果我要使用唯一索引,那么将它用于每个唯一值仍然有效吗?例如,具有用户名,电子邮件等的唯一索引。

2 个答案:

答案 0 :(得分:1)

  

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

在第一种情况下,您将找到具有用户名的用户,然后检查是否找到了用户名。因此,在这种情况下,您的数据库会检查此用户名,您还会进行一次检查。

现在考虑第二种情况,其中存在唯一索引。所以你给mysql数据,它会先尝试检查,然后抛出错误或将数据放入DB。这样,如果usrname已经在数据库中,您就不必检查双倍。这也将为您节省竞争条件

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

答案 1 :(得分:0)

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

话虽如此,我建议在插入之前使用select进行检查,以便在临时插入之前通知用户“使用的用户名”。

使用唯一索引的另一个好理由是性能。根据表格的大小,它可以更快。