postgres 数据库入库更新语句, 不存在则添加,存在则更新或忽略

在 PostgreSQL 中,如果你想要插入数据,但希望在数据已存在时执行插入操作,可以使用 INSERT ... ON CONFLICT 语法。这种方法允许你指定在唯一约束冲突时执行的操作,例如忽略或更新。

假设你有一个表 my_table,其中有一个唯一约束(比如一个或多个字段组成的唯一索引),你可以使用以下方式来实现条件插入:

示例

假设有一个表 users,有两个字段 idname,其中 id 是主键或有唯一约束,我们想要插入新用户数据。如果 id 已存在,则忽略该插入操作。

 

sql

INSERT INTO users (id, name) VALUES (1, 'Alice') ON CONFLICT (id) DO NOTHING;

  • INSERT INTO users (id, name):指定要插入数据的表和列。
  • VALUES (1, 'Alice'):指定要插入的具体值。
  • ON CONFLICT (id) DO NOTHING:在发生唯一约束冲突(这里是 id 列)时,执行 DO NOTHING,即什么也不做。

另一种情况:更新现有记录

如果你希望在发生冲突时更新现有记录而不是忽略,你可以使用 ON CONFLICT ... DO UPDATE

 

sql

INSERT INTO users (id, name) VALUES (1, 'Alice') ON CONFLICT (id) DO UPDATE SET name = excluded.name;

  • ON CONFLICT (id) DO UPDATE:在发生冲突时执行更新操作。
  • SET name = excluded.name:使用 excluded 表示要插入的行,因此这里将更新现有记录的 name 字段为插入行的 name 值。

注意事项

  • 在使用 ON CONFLICT 时,你需要确保表中有唯一约束或主键,否则 PostgreSQL 将无法确定冲突。
  • 在实际使用中,根据你的需求和表结构,可以调整 ON CONFLICT 子句来执行适当的操作(如忽略或更新)。

通过这种方式,你可以有效地在 PostgreSQL 中实现根据条件插入数据,避免重复记录的问题。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值