如何在不使用主键时进行插入或替换

时间:2013-10-12 16:31:08

标签: android mysql database sqlite android-sqlite

我在多设备android系统上有一个sqlite数据库需要UUID(是的,它需要它们),但是我没有将UUID设置为主键,而是UUID只是一个列而主键只是一个每个设备上的INTEGER(未传输),而是在本地android数据库上自动生成

我正在根据UUID是否存在进行更新(如果失败)插入例程 - 这非常慢,最终我想将其转换为带有SQLITESTATEMENT的批量系统

然而,为了让我达到这一点,我需要使INSERT OR REPLACE(或REPLACE INTO)与我的数据集一起工作 - 据我所知它只能根据主键是否已经存在 - 因为我的主键不是我真正关心的如何根据不同的列使Replace Into工作? 或许我可以用不同的方式进行批量插入 - 这不涉及替换intos - 但仍然可以处理插入或更新 -

感谢任何帮助

我一直用于参考的一些项目 How do I UPDATE a row in a table or INSERT it if it doesn't exist?

http://www.buzzingandroid.com/2013/01/sqlite-insert-or-replace-through-contentprovider/

Improve INSERT-per-second performance of SQLite?

How do I use prepared statements in SQlite in Android?

http://developer.android.com/reference/android/database/sqlite/SQLiteStatement.html#execute() Android SQLite database: slow insertion

1 个答案:

答案 0 :(得分:3)

只要您创建UUID字段INSERT OR REPLACE,即使UUID不是主键,也可以使用UNIQUE;

CREATE TABLE test (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  uuid UUID UNIQUE NOT NULL
);

任何违反UNIQUE约束的插入都会替换现有行(但会为新行生成新的主键)

A very simple SQLfiddle to test with