如何在websql中通过一次查询检查数据是否存在并插入?
How to check whether data exists and insert by one query in websql?
我可以有一个完整的查询来检查数据是否已经在数据库中,如果没有则插入吗?
我相信这可以通过使用 TRANSACTION
在正常 SQL 中完成。
考虑不做手动SELECT
查询然后INSERT
我有超过1个table要完成。
由于 WebSQL 是 SQLite 的一个实现,您可以使用 INSERT OR IGNORE
在单个事务中管理 conflict resolution。
例如,如果您有以下 table:
CREATE TABLE data (id INTEGER PRIMARY KEY, event_id INTEGER, track_id INTEGER, value INTEGER);
CREATE UNIQUE INDEX data_idx ON data(event_id, track_id);
其中已包含数据:
1|1|2|3
2|2|3|4
您可以发出以下顺序语句:
INSERT OR IGNORE INTO data VALUES (NULL, 1, 2, 3);
INSERT OR IGNORE INTO data VALUES (NULL, 2, 3, 5);
INSERT OR IGNORE INTO data VALUES (NULL, 3, 4, 5);
而 SELECT * FROM data
的结果将是:
1|1|2|3
2|2|3|4
3|3|4|5
现有行不会因为约束冲突而更新,但前 2 条语句将被忽略而不是失败,因此第三条语句将成功执行并插入第三行。
我可以有一个完整的查询来检查数据是否已经在数据库中,如果没有则插入吗?
我相信这可以通过使用 TRANSACTION
在正常 SQL 中完成。
考虑不做手动SELECT
查询然后INSERT
我有超过1个table要完成。
由于 WebSQL 是 SQLite 的一个实现,您可以使用 INSERT OR IGNORE
在单个事务中管理 conflict resolution。
例如,如果您有以下 table:
CREATE TABLE data (id INTEGER PRIMARY KEY, event_id INTEGER, track_id INTEGER, value INTEGER);
CREATE UNIQUE INDEX data_idx ON data(event_id, track_id);
其中已包含数据:
1|1|2|3
2|2|3|4
您可以发出以下顺序语句:
INSERT OR IGNORE INTO data VALUES (NULL, 1, 2, 3);
INSERT OR IGNORE INTO data VALUES (NULL, 2, 3, 5);
INSERT OR IGNORE INTO data VALUES (NULL, 3, 4, 5);
而 SELECT * FROM data
的结果将是:
1|1|2|3
2|2|3|4
3|3|4|5
现有行不会因为约束冲突而更新,但前 2 条语句将被忽略而不是失败,因此第三条语句将成功执行并插入第三行。