加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite – UPSERT * not * INSERT或REPLACE

发布时间:2020-12-12 19:22:52 所属栏目:百科 来源:网络整理
导读:http://en.wikipedia.org/wiki/Upsert Insert Update stored proc on SQL Server 有没有一些聪明的方式来做这个在SQLite,我没有想过? 基本上,如果记录存在,我想更新四列中的三个, 如果不存在,我想使用第四列的默认(NUL)值插入记录。 ID是主键,因此只
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')
          );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读