0

我有一个表“用户”,其中包括“电子邮件”和“用户名”列。我想确保在创建帐户时,不存在具有相同用户名或电子邮件的帐户(行)。目前,该程序只检查电子邮件或用户名的行数是否相同,如果计数为零,则插入包含电子邮件和用户名的行。

但是,这是两个独立的查询,并且由于这是一个多线程 Web 应用程序,它引入了竞争条件的可能性,导致两个帐户具有相同的用户名,在尝试登录时都会导致问题。

所以,我的问题是:有没有办法在单个 SQL 查询中,仅在没有类似行的情况下插入一行(即使用相同的用户名)?

对于那些想知道的人,我在 ruby​​ 中使用 Sequel gem。

4

1 回答 1

2

解决此问题的一种非常好的方法是在您提到的列上定义唯一约束。然后,如果您尝试插入重复项,则插入将失败并出现可捕获的错误。

使用此方法还为您提供了一种集中的、一致的应用机制,以确保数据库本身的数据完整性,而不是访问数据库的任何程序。

于 2013-07-09T04:07:50.153 回答