为了防止在数据库中输入重复的用户名并通知用户,在插入时使用异常捕获或在插入前选择查询是否更标准/更可取?
>
异常捕获:如果我尝试插入用户输入,并且用户名已经存在,那么SQL数据库将抛出主键约束违反异常。如果发生这种情况,我可以抓住它,做任何事。
selectquery:如果它返回任何与用户名匹配的元组,那么我就不需要插入了。然后我可以显示错误消息。
我想这里使用异常的主要优点是查询和行更少(速度更快?)。然而,我不认为这是一个例外情况,因为重复可能经常发生。
除非您的数据库查询层提供了多个异常类(对于每个SQL状态-在关系数据库的情况下),否则您不应该使用异常捕获;在这种情况下,您需要依赖异常的消息-它可能会随着时间的推移而改变。
如果您使用异常捕获
方法,即尝试插入,则在出现异常
时,请记住一件事计数器
对于自动增量列
将增加让我们举一个例子,您已成功插入一条记录,其id为1,然后尝试插入您需要的相同信息获得异常,然后您尝试插入另一个数据,该数据将被插入,但id号将为3,而不是2,因为异常发生时1会增加,因此请记住,如果您使用异常情况,则在异常发生时您将丢失这些id号。如果您不关心id计数器,请继续使用此选项。
但我更喜欢先选择,然后插入
希望它有意义
至少,您应该尽可能使用选项1-处理主键约束冲突-因为数据库是最后一个入口点。如果您检查代码中是否存在重复项(尽管可能性很小),则仍然可能存在重复,因为在返回初始SELECT和返回INSERT语句之间存在延迟,并且其他用户可能在该时间窗口中执行了相同的INSERT。
但是,首先运行select来查看记录是否存在,而不是盲目地让insert每次都运行,这可能更有效。
所以我推荐两者。
这是我的用户注册数据库的方式,但我的问题是:如何防止数据库具有相同用户名的副本,或者换句话说,如果用户名存在于数据库。
调试栏读取 事实证明,每次检查我的用户,通过
在我的 Web 应用程序中,我想实现以程 用户点击使用Google按钮登录 用户在重定向屏幕中选择帐户 我收到一个JWT,其中包含帐户ID和电子邮件地址 我将帐户ID设置为登录提示,并仅设置“同意”提示 我创建Auth URL并再次重定向到Google以获得同意 在下一个同意屏幕中,用户应该只需要批准同意,而不是第二次选择他的帐户 我处理来自同意的回调 根据文档,我实现了“使用Google按钮登录
我一直在做一个登录/注册系统,我正在接近完成我的注册部分代码。我遇到的唯一问题是如何使它使用户不能用重复的用户名注册。我想让它工作,使我的数据库不会接受信息,它会告诉用户有关错误。 我的PHP
问题内容: 我如何捕获此异常: 问题答案: 我用弹簧,所以我们通过 但是就像@KevinGuancheDarias提到的那样: 请注意,虽然这可行。 我建议通过在save之前发出findBy来解决该问题 ,因为这很麻烦,我认为不保证它将在将来的版本中使用,甚至可能在没有通知的情况下中断。
如何捕获此异常: