当前位置: 首页 > 知识库问答 >
问题:

在博士后的两个专栏中,有没有可能只在其中一个专栏中出现冲突?

宇文修文
2023-03-14

我有一个表,其中有两列是唯一的,如果第一列(或两列)有冲突,我想向上插入,但是如果只有第二列有冲突,我什么也不做。这可能吗?

CREATE TABLE test (
    username    VARCHAR(255) NOT NULL UNIQUE,
    email       VARCHAR(255) NOT NULL UNIQUE,
    status      VARCHAR(127)
);

以下功能可以检查电子邮件中的冲突:

INSERT INTO test(username, email)
    VALUES ('test', 'test@test.test')
    ON CONFLICT(email) DO UPDATE SET status='upserted';

但我想这样做(下面的语法无效):

(INSERT INTO test(username, email)
    VALUES ('test', 'test@test.test')
    ON CONFLICT(email) DO UPDATE SET status='upserted')
    ON CONFLICT DO NOTHING;

共有1个答案

颜修明
2023-03-14

是的,你可以这样做,但这需要一些有条件的诡计。

首先,您只能有一个ON CONFLICT子句,但是这个子句可以指定多个列,并在这些列上定义约束。在您的情况下,应该是ON CONFLICT(用户名,电子邮件)。当其中一个或两个列触发冲突时,conflict_action就会启动。

其次,conflict_action子句应该将插入候选行(由EXCLUDED引用)中的值与当前值进行比较,并采取适当的操作<代码>不执行任何操作实际上是不可能的,但您可以将旧值指定给新行,这样效果是相同的(但会发生更新)。不漂亮,但看起来有点像这样:

INSERT INTO test(username, email)
    VALUES ('test', 'test@test.test')
    ON CONFLICT(username, email) DO UPDATE 
        SET status = CASE WHEN username != EXCLUDED.username -- only email offending
                          THEN status                        -- so "do nothing"
                          ELSE 'upserted'                    -- some other action
                     END;
 类似资料:
  • 当冲突发生在表中的两个列之一时,可以在Postgres 9.5中执行吗?基本上我有两个列,如果其中一个列抛出唯一的约束冲突,那么我想执行更新操作。

  • 创建专栏 功能介绍:学员购买后能随时阅读专栏内容。 适用场景:适合系列文章、出版书籍、小说等。 步骤 从【付费阅读】→【专栏】→【新建专栏】,进入专栏编辑页面。 填写专栏名称,所属分类,完善显示顺序、专栏价格、专栏简介以及上传图文封面, 点击【立即创建】即可成功创建专栏。

  • 嘿,伙计们,我正在制作这个游戏,我想知道如何在右边制作另一个专栏。你会从视觉上更好地理解: 这就是我现在做的: 但是如果我再加一个按钮,它就会垂直向下。我如何使它水平到中间,这样我就可以使我的井字游戏。 代码:

  • 专栏介绍 本专栏的主要目的是为了解决在使用 AkShare 中遇到的各种问题,主题包括但不限于:环境配置、AkShare 安装和升级、数据接口请求、代理配置等等。 常见问题 安装 AkShare 的速度慢,下载时间久 请使用国内的源来安装 AkShare 基于 Python 的代码如下: pip install akshare -i http://mirrors.aliyun.com/pypi/s

  • 本仓库以 Spring 源码学习为目的,通过手写简化版 Spring 框架,了解 Spring 核心原理。 在手写的过程中会简化 Spring 源码,摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。 在资料整理的过程中,发现了两个非常优秀的手写 Spring 框架源码,tiny-spring、mini-sprin

  • 下面是fiddle http://jsfiddle.net/sgtrx/中的代码(应该在早些时候完成,对不起) 好的,我的导航栏在Div包装器内,在标题下,在内容区域(主体)的顶部。 我是个新手,所以请原谅我可能犯的任何错误。 当我添加边框来分隔每个块(按钮或文本)时,它很好地分隔了按钮,然而,它在导航栏的末尾(右侧)留下了一个小空格。 包装器Div是1000px,我有5个按钮,每个200px,因