【发布时间】:2010-08-18 21:25:58
【问题描述】:
我使用SQLite 来维护一个数据库,其中包含一个带有路径的表。表的 CREATE 语句如下所示
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;如果它似乎不存在,我添加一个新条目,最后执行另一个 SELECT 以获取最近使用的 id。这似乎有点笨拙,可能效率低下。
有没有更紧凑和/或更有效的方式来实现这个逻辑?
UPDATE:常见的情况是条目确实已经存在,所以上面伪代码中的初始SELECT在大多数情况下都会找到结果。
【问题讨论】:
标签: sql optimization sqlite query-optimization