我应该使用' try-catch'或者' if-else'在为DB编写唯一字段时?

时间:2014-03-21 12:31:21

标签: mysql database exception web

在我的应用中,我需要生成一个随机字符串并写入数据库表中的唯一键字段。 我想知道哪种方法更好:

  1. 只需编写,捕获DB生成的密钥冲突异常,然后重试。
  2. 使用新字符串查询表格,如果存在,请尝试使用其他字符串。
  3. 由于字段是唯一键,在构建索引的情况下,2中的查询不会花费太多,但无论冲突多么罕见,查询始终存在。

    还有什么需要考虑的吗?这里的标准做法是什么?

1 个答案:

答案 0 :(得分:3)

在大多数情况下,我建议尝试编写您的值并处理密钥冲突(如果发生)。这种方法只需要在正常的happy-path下对数据库提出一个请求。此外,有可能(尽管可能不太可能)另一个进程可能会在您查询其存在的时间与插入它的时间之间插入冲突值。第一种方法可以防止这个问题。