如果sqlite3中不存在等效的原子插入,如何进行原子插入?

如果sqlite3中不存在等效的原子插入,如何进行原子插入?,sqlite,Sqlite,这些问题真的说明了一切 我有一个表,如果它不存在,我想插入一行。 或者我应该只执行一个insert,如果违反了键约束,那么忽略它吗?使用一个触发器,在insert之前触发并丢弃重复的行,类似于 CREATE TRIGGER trigger_name BEFORE INSERT on your_table FOR EACH ROW WHEN EXISTS (SELECT * FROM your_table WHERE id = NEW.id) BEGIN SELECT RAISE(IGNORE

这些问题真的说明了一切

我有一个表,如果它不存在,我想插入一行。
或者我应该只执行一个insert,如果违反了键约束,那么忽略它吗?

使用一个触发器,在insert之前触发并丢弃重复的行,类似于

CREATE TRIGGER trigger_name
BEFORE INSERT on your_table
FOR EACH ROW WHEN EXISTS (SELECT * FROM your_table WHERE id = NEW.id)
BEGIN
  SELECT RAISE(IGNORE);
END;

使用在插入之前触发的触发器,并丢弃重复的行,类似于

CREATE TRIGGER trigger_name
BEFORE INSERT on your_table
FOR EACH ROW WHEN EXISTS (SELECT * FROM your_table WHERE id = NEW.id)
BEGIN
  SELECT RAISE(IGNORE);
END;

使用INSERT或IGNORE:

使用INSERT或IGNORE:

我认为这将非常缓慢和低效,但感谢您的建议。插入或忽略似乎满足了我的要求。尝试“稍微快一点”。只是为了好玩,我用两种方式对其进行了基准测试<代码>插入或忽略平均比触发时间长5%。我有一个理论可以解释为什么会这样,但是我必须通过SQLite源代码来证实它。我认为这将是非常缓慢和低效的,但是谢谢你的建议。插入或忽略似乎满足了我的要求。尝试“稍微快一点”。只是为了好玩,我用两种方式对其进行了基准测试<代码>插入或忽略平均比触发时间长5%。我有一个理论,为什么会这样,但必须通过SQLite源代码来证实它。