我有一张桌子'用户'其中包括“电子邮件”和“电子邮件”等列。和'用户名'。我想确保在创建帐户时,不存在具有相同用户名或电子邮件的帐户(行)。目前,程序只检查电子邮件或用户名相同的行数,如果计数为零,则插入包含电子邮件和用户名的行。
但是,这是两个单独的查询,由于这是一个多线程的Web应用程序,它引入了竞争条件的可能性,导致两个帐户具有相同的用户名,导致尝试登录时出现问题。
所以,我的问题是:在单个SQL查询中,只有在没有类似行的情况下(即使用相同的用户名)才能插入行吗?
对于那些想知道的人,我正在使用红宝石中的续集宝石。
答案 0 :(得分:2)
解决此问题的一个非常好的方法是在您提到的列上定义唯一约束。然后,如果您尝试插入重复项,则插入将失败并显示可捕获的错误。
使用此方法还为您提供了一个集中的,一致的应用机制,以确保数据库本身的数据完整性,而不是任何访问数据库的程序。