如何获取现有表条目的ID或插入新表项以防它不存在?

时间:2010-08-18 12:45:21

标签: sql optimization sqlite query-optimization

我正在使用SQLite来维护一个数据库,其中包含一个带路径的表。该表的CREATE语句如下所示

CREATE TABLE path (id INTEGER PRIMARY KEY AUTOINCREMENT,
                   name TEXT,
                   UNIQUE(name));

我正在寻找一种简短的方法来说'将这个给定的路径插入到路径表中,然后给我分配它的ID,或者只是在SQL中已经存在的情况下给我ID。

现在,我正在使用多个SQL语句(前面的伪代码):

unsigned int getIdForPath(p) {
  result = exec("SELECT id FROM path WHERE name='$p';");
  if result.empty {
    exec("INSERT INTO path VALUES(NULL, '$p');");
    result = exec("SELECT last_insert_rowid() FROM path;");
  }
  return result.toInt();
}

所以,我首先想查找id;如果它似乎不存在,我添加一个新条目,最后再做一个SELECT来获取最近使用的id。这似乎有点笨拙,可能效率低下。

是否有更紧凑和/或更有效的方法来实现这种逻辑?

更新:常见的情况是条目已经存在,因此上述伪代码中的初始SELECT将在大多数情况下找到结果。< / p>

1 个答案:

答案 0 :(得分:1)

您可以使用INSERT OR IGNORE插入值(如果该值尚不存在)并选择该元素的ID,则可以通过两个步骤执行此操作。