您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

SQLite - UPSERT *not* INSERT 或 REPLACE

SQLite - UPSERT *not* INSERT 或 REPLACE

假设表中有三列:ID、NAME、ROLE

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

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

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

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

在 SQLite 中使用 sqlite On 冲突子句 UPSERT 支持!UPSERT 语法已添加sqlite 3.24.0 版!

UPSERT 是对 INSERT 的特殊语法补充,如果 INSERT 违反唯一性约束,它会导致 INSERT 表现为 UPDATE 或无操作。UPSERT 不是标准 sqlsqlite 中的 UPSERT 遵循 Postgresql 建立的语法。

这将更新 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, name, role) 
  VALUES (  1, 
            'Susan Bar',
            COALESCE((SELECT role FROM Employee WHERE id = 1), 'Benchwarmer')
          );
SQLServer 2022/1/1 18:52:47 有280人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶