根据这个需求,在网上搜了很久,发现比较好的有两种做法。
1、一步法。实际上是Insert Or Replace
语法:
INSERT OR REPLACE INTO tasks (uuid, content) values ('axg','first')
优点:原生支持
缺点:这个Replace不是Update而是Delete And Insert,其自动编号字段也会重新编号
2、引擎两步法。先尝试Update,失败后再Insert
语法:
-- 尝试更新 UPDATE tasks SET content='last' WHERE uuid='axg'; -- 如果更新失败(行不存在)就插入一行 INSERT INTO tasks (uuid, content) SELECT 'axg', 'last' WHERE (Select Changes() = 0);
优点:放在一个Command里执行,不需要在Client端获取状态即可确保InsertOrUpdate
缺点:SQL有点长