我正在尝试将记录插入到SQLite数据库表中。该表对列“URL”具有唯一约束,并且主键自动增量整数“_id”。
我使用insert或replace作为我的冲突解决方案,因为我需要保留新数据。但是,此方法是递增主键并弄乱其他表中的一些外键。
在不更新_id的情况下覆盖记录的最佳方法是什么?
答案 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) + ");");