我正在 node.js 中使用登录/注册系统。
我通常查询数据库,检查给定的用户名是否已经存在,如果没有,我创建新用户。
我最近得到了一个想法,即在MySQL数据库中使用Unique Index作为用户名。我有一些问题。
我觉得MySQL在发生重复时会出错,但我可能只是疯了。
答案 0 :(得分:1)
检查重复项的最有效方法是什么?在数据库中搜索给定的用户名,或使用唯一索引并从MySQL中捕获错误(如果已存在?)
在第一种情况下,您将找到具有用户名的用户,然后检查是否找到了用户名。因此,在这种情况下,您的数据库会检查此用户名,您还会进行一次检查。
现在考虑第二种情况,其中存在唯一索引。所以你给mysql数据,它会先尝试检查,然后抛出错误或将数据放入DB。这样,如果usrname已经在数据库中,您就不必检查双倍。这也将为您节省竞争条件
如果您担心mysql抛出错误,请不要担心。 mysql将抛出一个完整性错误,您可以捕获并发送适当的响应,如用户名已存在
答案 1 :(得分:0)
最好使用唯一索引(在数据库引擎中进行验证),因为这可以避免线程争用并确保数据库完整性。通过select验证是不安全的,不是推荐的方法。
话虽如此,我建议在插入之前使用select进行检查,以便在临时插入之前通知用户“使用的用户名”。
使用唯一索引的另一个好理由是性能。根据表格的大小,它可以更快。