SQLite INSERT OR IGNORE 不会忽略重复项
SQLite INSERT OR IGNORE doesn't ignore duplicates
我正在编写一个 java 程序来合并两个具有相同架构的数据库。这是 SQLite 或我的查询的问题,而不是 Java 代码,因为我能够在 DB 浏览器应用程序中准确地复制它。
我有 2 个数据库:一个正在合并,一个是目的地。
我最初连接到正在合并的数据库,然后将目标数据库连接为“dest”。
我发出以下查询来复制数据:
INSERT or IGNORE into dest.AnalogInput SELECT * from AnalogInput where timestamp >= 1600824664131000000 AND timestamp <= 1600824664131000000
这工作正常并插入数据。如果我 运行 它再次使用相同的数据,它会在目标数据库中插入一个副本。我认为“OR IGNORE”的目的是为了防止重复?是我的查询不正确还是我对 OR IGNORE 的理解不正确?
编辑:是的,我知道时间戳是相同的 - 这是一个通用查询,我只是在单个时间戳上使用几个样本进行测试。
谢谢!
INSERT OR IGNORE
仅在 table.
中存在唯一约束时有效
因为没有而且你不能添加任何东西,因为 SQLite 不是那么灵活,做你想做的唯一方法是这样的:
INSERT or IGNORE INTO dest.AnalogInput
SELECT * FROM AnalogInput WHERE ....
EXCEPT
SELECT * FROM dest.AnalogInput
我正在编写一个 java 程序来合并两个具有相同架构的数据库。这是 SQLite 或我的查询的问题,而不是 Java 代码,因为我能够在 DB 浏览器应用程序中准确地复制它。
我有 2 个数据库:一个正在合并,一个是目的地。
我最初连接到正在合并的数据库,然后将目标数据库连接为“dest”。 我发出以下查询来复制数据:
INSERT or IGNORE into dest.AnalogInput SELECT * from AnalogInput where timestamp >= 1600824664131000000 AND timestamp <= 1600824664131000000
这工作正常并插入数据。如果我 运行 它再次使用相同的数据,它会在目标数据库中插入一个副本。我认为“OR IGNORE”的目的是为了防止重复?是我的查询不正确还是我对 OR IGNORE 的理解不正确?
编辑:是的,我知道时间戳是相同的 - 这是一个通用查询,我只是在单个时间戳上使用几个样本进行测试。
谢谢!
INSERT OR IGNORE
仅在 table.
中存在唯一约束时有效
因为没有而且你不能添加任何东西,因为 SQLite 不是那么灵活,做你想做的唯一方法是这样的:
INSERT or IGNORE INTO dest.AnalogInput
SELECT * FROM AnalogInput WHERE ....
EXCEPT
SELECT * FROM dest.AnalogInput