📅  最后修改于: 2023-12-03 15:09:28.067000             🧑  作者: Mango
在 PostgreSQL 中,可以使用 INSERT INTO
命令,并在后面加上 ON CONFLICT
子句来支持 DUPLICATE KEY UPDATE
操作。
INSERT INTO table_name (column1, column2, ..., columnN)
VALUES (value1, value2, ..., valueN)
ON CONFLICT (column_name) DO UPDATE
SET column1 = value1, column2 = value2, ..., columnN = valueN;
其中:
table_name
表示要插入数据的表名。(column1, column2, ..., columnN)
是表中要插入数据的列名。(value1, value2, ..., valueN)
是要插入的数据值。ON CONFLICT (column_name)
表示当想要插入的数据与表中现有数据冲突时,以 column_name
列为标准进行更新。DO UPDATE
表示执行更新操作。SET column1 = value1, column2 = value2, ..., columnN = valueN
表示更新的具体操作,即将冲突数据中的值更新为新的值。假设有以下名为 users
的表:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT NOT NULL
);
我们要插入一条 id 为 1,name 为 "John",age 为 30 的数据。如果这条数据在表中已经存在,则把其 age 更新为 31。
INSERT INTO users (id, name, age)
VALUES (1, 'John', 30)
ON CONFLICT (id) DO UPDATE
SET age = 31;
执行完以上语句后,如果表中不存在 id 为 1 的数据,则插入一条新的数据;否则,将 id 为 1 的数据的 age 值从 30 更新为 31。
以上就是对 PostgreSQL 进行 DUPLICATE KEY UPDATE 操作的介绍。这个操作功能强大,在处理重复数据的场景中非常实用。需要注意的是,使用这个操作时要保证表结构中有主键或唯一索引来标识数据的唯一性。