【问题标题】:How does SQL check if a record exists?SQL如何检查记录是否存在?
【发布时间】:2012-10-03 17:48:42
【问题描述】:

我有一个 SQLite 数据库并且正在使用 INSERT OR IGNORE 查询。我有一个表,它的主键是自动递增的 int,还有另一个唯一的列。我的问题是,SQLite 如何检查记录是否已经存在,以便知道是否忽略它?它是否先扫描主键,然后再扫描任何其他唯一列?如果是这样,它是否可以比较某些查询的主键之前的唯一列?此外,如果一列是唯一的,它是否已经被索引?

【问题讨论】:

    标签: sql sqlite insert primary-key


    【解决方案1】:

    UNIQUE 约束是使用索引实现的,所以 UNIQUE 列已经被索引了。

    在评估 INSERT OR IGNORE 时,如果表中的 任何 UNIQUE 约束将被 INSERT 语句违反,则使用 OR IGNORE 代替。从功能的角度来看,评估的顺序并不重要,应该对性能产生很小的影响。据推测,评估顺序由查询优化器处理,但如果没有,性能损失应该很小。

    【讨论】:

    • 谢谢,我不确定是否会有显着的性能差异。
    【解决方案2】:

    根据您想要深入,我可能会推荐downloading the SQLite3 source code,并开始在其中搜索“独特”和“约束”等术语 - 可以通过阅读源代码来提供您问题的一些答案只需几分钟。

    代码似乎记录得非常好。如果您要大量使用 SQLite,至少阅读提供的 cmets 可能不是一个坏主意。我敢打赌,您会从中获得比您预期的更多的洞察力。

    【讨论】:

    • 感谢您的建议。经常通过代码搜索,由于缺乏任何像样的文档,我感到困惑。将通过这个来查看其他有趣的提示。
    猜你喜欢
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2019-04-07
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多