在 PostgreSQL 9.5 及以上版本中,可以使用 `INSERT INTO ... ON CONFLICT` 语法实现插入新记录或更新现有记录。
该语法使用唯一约束(如 PRIMARY KEY 或 UNIQUE 索引)的冲突解决机制来确定是插入一条新记录还是更新现有记录。
以下是使用 `INSERT INTO ... ON CONFLICT` 语法的示例:
INSERT INTO table_name (column1,column2,...)
VALUES (value1,value2,...) ON CONFLICT (unique_column) DO UPDATE
SET column1 = excluded.column1,column2 = excluded.column2,...;
在上面的示例中,`table_name` 是要插入数据的表的名称,
`column1,...` 是要插入的列名,
`value1,...` 是要插入的对应的值。
`unique_column` 表示与唯一约束相对应的列,即如果在插入记录时该列的值与现有记录相同,则会触发冲突。 在 `ON CONFLICT` 子句之后,可以使用 `DO UPDATE` 子句来指定如何更新现有记录。
`excluded` 是一个伪行变量,代表将要插入的行数据。
通过 `excluded` 可以访问将要插入记录的列值,从而在发生冲突时进行更新。 需要注意的是,使用 `ON CONFLICT` 语法的部分是原子的。实际上,该语法执行以下两个操作中的一个:要么将新行插入到该表中,要么更新现有行。如果更新操作失败,则整个操作将被回滚,即任何插入的行都将不被保留。
您可以在官方 PostgreSQL 文档中了解更多关于 `INSERT INTO ... ON CONFLICT` 语法的详细信息。
原文地址:https://blog.csdn.net/qq_34471241/article/details/130343250
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。