暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

postgres数据库ON CONFLICT DO UPDATE子句

原创 姚振宇 2023-08-10
245

在postgreSQL数据库中,归并数据又被称为UPSERT语法,值的是INSERT...ON CONFLICT UPDATE,用来解决在数据插入过程中发生的冲突,如果违反用户自定义约束导致冲突,当发生冲突时,可以忽略该插入操作,也可以执行指定的update语句。

语法格式:

[ WITH [ RECURSIVE ] with_query [, ...] ] INSERT INTO table_name [ AS alias ] [ ( column_name [, ...] ) ]

[ OVERRIDING { SYSTEM | USER } VALUE ]

{ DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query } 

[ ON CONFLICT [ conflict_target ] conflict_action ] [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]

其中,conflict_target可以是以下之一:

where conflict_target can be one of: ( { index_column_name | ( index_expression ) } [ COLLATE collation ] [ opclass ] [, ...] )

[ WHERE index_predicate ] ON CONSTRAINT constraint_name 

其中,conflict_action is one of:

 DO NOTHING DO UPDATE SET { column_name = { expression | DEFAULT } | ( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) | ( column_name [, ...] ) = ( sub-SELECT ) } [, ...] [ WHERE condition ]

ON CONFLICT 子句作为抛出唯一性冲突或排他性约束冲突错误的一种选择,对于每一个要插入的行,如果违反了conflict_target声明的唯一索引约束,则执行conflict_action 所规定的可选择动作。

ON CONFLICT DO NOTHING:不采取任何动作。

ON CONFLICT DO UPDATE:更新和违反唯一性行

conflict_target:指定冲突目标,即与哪些可用约束或是唯一索引产生冲突

conflict_action:指定一个冲突发生时的可选择动作。它可以是ON CONFLICT DO NOTHING 或是ON CONFLICT DO UPDATE;用来声明一个冲突发生时所要采取的update详细动作



「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论