如何在不更改主键的情况下执行SQL插入或替换操作?

时间:2011-03-07 18:44:27

标签: android sql database sqlite

我正在尝试将记录插入到SQLite数据库表中。该表对列“URL”具有唯一约束,并且主键自动增量整数“_id”。

我使用insert或replace作为我的冲突解决方案,因为我需要保留新数据。但是,此方法是递增主键并弄乱其他表中的一些外键。

在不更新_id的情况下覆盖记录的最佳方法是什么?

2 个答案:

答案 0 :(得分:5)

简单的答案是停止使用Replace语法。这会导致旧记录被删除,然后添加一个新记录......这将增加您的索引。

利用UPDATE语法来处理冲突

编辑:

如果你真的偏爱替换语法,那么它将付出代价。您需要编写其他代码,以便将旧索引的所有常见事件更新为新索引。不是太难,但这将纠正同步索引的问题

文档[在REPLACE部分列出的页面下方:] http://www.sqlite.org/lang_conflict.html

答案 1 :(得分:1)

这是我的SQLite代码

"CREATE TABLE IF NOT EXISTS posts (" +
"_id integer NOT NULL," +
"id_language integer NOT NULL" +
");" +
"CREATE UNIQUE INDEX posts_idx ON posts(_id, id_language);";


"INSERT OR REPLACE INTO " + DB_TABLE + " (" + formulateColumns() + ") " +
            "VALUES (" + formulateValues(v) + ");");