代码之家  ›  专栏  ›  技术社区  ›  Frerich Raabe

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

  •  0
  • Frerich Raabe  · 技术社区  · 14 年前

    我在用 SQLite

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

    我在寻找一种简短的方式,在SQL中说“将这个给定的路径插入路径表并给我它被分配的id,或者如果它已经存在,就给我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;如果它似乎不存在,我添加一个新条目,最后再进行一次选择以获取最近使用的id。这似乎有点笨拙,可能效率低下。

    更新 :常见的情况是 已经存在了,所以上面的伪代码中的初始SELECT在大多数情况下都会找到结果。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Giorgi    14 年前

    你可以通过使用 INSERT OR IGNORE 如果值不存在,则插入该值,然后选择元素的id。