假设表中有三列: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 不是标准 sql。sqlite 中的 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')
);