为了防止重复的用户名被输入数据库并通知用户,在插入之前插入或选择查询时使用异常捕获是更标准/首选吗?
>异常捕获:如果我尝试插入用户输入并且用户名已经存在,则SQL数据库将抛出主键约束违例异常.如果发生这种情况我会抓住它并做任何事情.
>选择查询:如果它返回任何与用户名匹配的元组,那么我不会打扰插入.然后我可以显示错误消息.
我想在这里使用Exceptions的主要优点是查询和行数较少(速度更快?).但是,我不认为这是一个例外情况,因为重复可能经常发生.
解决方法:
至少,您应该使用选项1 – 处理主键约束违规 – 如果可能,因为数据库是最后一个入口点.如果检查代码中的重复项(尽管非常不可能),仍然可以进行复制,因为在返回初始SELECT和发回INSERT语句之间存在延迟,而另一个用户可能在该时间窗口中执行了相同的插入.
但是,首先运行select以查看记录是否存在可能更有效,而不是盲目地让插入每次都运行.
所以我会推荐两者.