SQLite – UPSERT * not * INSERT或REPLACE

前端之家收集整理的这篇文章主要介绍了SQLite – UPSERT * not * INSERT或REPLACE前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
http://en.wikipedia.org/wiki/Upsert

Insert Update stored proc on SQL Server

有没有一些聪明的方式来做这个在sqlite,我没有想过?

基本上,如果记录存在,我想更新四列中的三个,
如果不存在,我想使用第四列的默认(NUL)值插入记录。

ID是主键,因此只有一条记录到UPSERT。

(我试图避免SELECT的开销,以确定我是否需要UPDATE或INSERT显然)

建议?

假设表中有3列。ID,NAME,ROLE

BAD:这将使用ID = 1的新值插入或替换所有列:

INSERT OR REPLACE INTO Employee (id,name,role) 
  VALUES (1,'John Foo','CEO');

BAD:这将插入或替换2列… NAME列将被设置为NULL或默认值:

INSERT OR REPLACE INTO Employee (id,'code monkey');

GOOD:这将更新2列。
当ID = 1存在时,NAME将不受影响。
当ID = 1不存在时,名称将为默认值(NULL)。

INSERT OR REPLACE INTO Employee (id,role,name) 
  VALUES (  1,'code monkey',(SELECT name FROM Employee WHERE id = 1)
          );

这将更新2列。
当ID = 1存在时,ROLE将不受影响。
当ID = 1不存在时,角色将设置为“Benchwarmer”而不是默认值。

INSERT OR REPLACE INTO Employee (id,role) 
  VALUES (  1,'Susan Bar',COALESCE((SELECT role FROM Employee WHERE id = 1),'Benchwarmer')
          );

猜你在找的Sqlite相关文章