【发布时间】:2015-12-06 19:08:07
【问题描述】:
我有一个 SQLite 数据库,我创建了一个这样的唯一索引:
CREATE UNIQUE INDEX [my_unique_idx] ON [my_table] ([field1], [field2]);
现在在我的程序中,我想在my_table 中插入一行INSERT OR REPLACE,如果它被插入,我需要在另一个“从属”表中插入其他行。另一方面,如果该行已更新,我无需执行任何操作。换句话说:
if ( query.exec(
"insert or replace into my_unique_idx"
" (field1, field2, other_field)"
" values"
" (1, 2, 'foo')"
) )
{
if ( query.is_was_really_inserted() ) // <---- how to ?
{
slave_query.exec( "insert into slave_table......
}
}
我知道,我可以通过几个查询来做到这一点:选择具有适当值的行,如果行不存在,则将数据插入两个表(“主”和“从”),然后更新“主”如果行存在,则为表。
但这使得唯一索引和INSERT OR REPLACE 子句毫无意义。
【问题讨论】:
-
你使用什么编程语言?
-
索引加快了搜索记录的速度。仅当您不关心实际发生的情况时,INSERT OR REPLACE 才有用。
-
@CL。谢谢你。当然,我使用索引,但不使用复合索引——一个用于自己的领域。顺便说一句,什么很快:为一个特定字段使用一个索引或为所有字段使用一个索引,这将在
where中进一步selects ? -
什么索引更有用取决于查询和数据。如果您不了解,请尝试两个索引(运行 ANALYZE 并使用 EXPLAIN QUERY PLAN 检查。)