我想知道为什么,当至少使用Peewee时,当条目已经在表中时,UPSERT会执行DELETE和INSERT而不是UPDATE?
是否有任何理由可以优先使用"删除然后插入"而不是"尝试UPDATE否则插入"?
UPDATE比DELETE&更快时间插入?或者UPSERT真的意味着INSERT(强制=真)查询吗?
答案 0 :(得分:0)
我想知道为什么,当至少使用Peewee时,当条目已经在表中时,UPSERT会执行DELETE和INSERT而不是UPDATE吗?
Peewee没有明确地删除然后插入。如果您使用的是 支持upsert的SQLite,那么peewee将发出:
INSERT OR REPLACE INTO <table> ...
这就是peewee实现upsert的方式。 Peewee本身不会发出单独的DELETE声明。
答案 1 :(得分:0)
不是更好:
UPDATE t SET a = 'pdf' WHERE id = 2;
INSERT INTO t(id, a) SELECT 2, 'pdf' WHERE changes() = 0;
如果更新失败,则更改()= 0,以便进行插入。