防止数据库中重复值的最佳方法是什么?
我有一个名为names的表,只有一个名为name的列是唯一的(声明为唯一属性)。
插入新名称(x)的最佳方式是什么?
方式1:我应该首先对名称x进行选择查询以检查是否存在。然后进行另一个查询以插入名称,如果它不存在于表中。
Way2:只有一个查询插入名称,如果名称已经存在则忽略错误。
答案 0 :(得分:3)
第二种方式是更好的方式。为什么在运行一个查询时运行两个查询?
当您将列声明为唯一时,您已告知数据库执行额外的工作以确保这是真的。您不需要做任何其他事情 - 除了检查返回时的错误。
答案 1 :(得分:0)
答案 2 :(得分:0)
数据库约束肯定会关注唯一性,但是如果你有逻辑,你需要将最后插入的ID用于其他子表,那么我认为你只需要在插入之前执行手动检查,否则只需要忽略异常由于重复。
答案 3 :(得分:0)
您提供的案例是简化的“upsert”。搜索upsert,你会找到更一般的问题的答案。一些数据库,如mysql提供 插入忽略这个简单的情况。 否则,对于您提到的简单情况,您可以使用第二种方法。对于更普遍的upsert,令人惊讶地难以做到正确。问题是并发更新。事实上,我没有看到一般的upserts令人满意的答案。有人说使用“merge”但这会受到并发问题的影响。