ON conflict(id) DO UPDATE 用法
时间: 2023-08-19 20:03:48 浏览: 144
upsert:测试脚本基准测试“INSERT...ON CONFLICT UPDATE”
ON CONFLICT是PostgreSQL中的一个特殊子句,用于在插入数据时处理冲突。该语法允许在插入数据时指定冲突解决策略。
具体来说,ON CONFLICT语法允许你在插入数据时指定一个“冲突目标”,也就是说,如果要插入的数据与现有数据发生冲突,则可以根据指定的冲突目标执行相应的操作。
其中,最常用的冲突目标是“id”列,即主键列。如果在插入数据时发现有相同的主键值已经存在,则可以使用ON CONFLICT来处理这种冲突。
ON CONFLICT的语法如下:
```
INSERT INTO table_name (col1, col2, col3, ...)
VALUES (val1, val2, val3, ...)
ON CONFLICT target_column DO UPDATE SET col1 = val1, col2 = val2, ...;
```
在这个语法中,target_column就是指定的冲突目标列,可以是主键列或者唯一约束列。如果在插入时发现冲突,则执行后面的DO UPDATE子句,用新的值更新已有的行。
例如,假设我们有一个表students,其中id是主键列,name和age是普通列。如果我们要插入一条新的记录,但发现id已经存在,则可以使用ON CONFLICT来更新这条记录的name和age值,如下所示:
```
INSERT INTO students (id, name, age)
VALUES (1, 'Alice', 20)
ON CONFLICT (id) DO UPDATE SET name = 'Alice', age = 21;
```
如果id=1的记录已经存在,则执行UPDATE语句,将name更新为'Alice',age更新为21。否则,插入一条新记录。
阅读全文