首页 > 解决方案 > MySql 在特定条件下插入重复、替换或忽略时

问题描述

我想创建一个 MySql 查询以插入到表中,当发生重复时,我想检查现有记录以确定是 REPLACE 还是 IGNORE。当现有记录的某个字段为 0 时执行 REPLACE,否则执行 IGNORE。如何以高效的方式做到这一点?

标签: mysql

解决方案


假设您的“检查”列(更新发生时应该为 0 的列)是 c2,您可以执行以下操作:

INSERT INTO table (id, c2, c3, c4)
VALUES
    (1, 'val2', 'val3', 'val4')
ON DUPLICATE KEY UPDATE
    c2 = IF(c2 = 0, VALUES(c2), c2),
    c3 = IF(c2 = 0, VALUES(c3), c3),
    c4 = IF(c2 = 0, VALUES(c4), c4);

它基本上是一个INSERT ... IGNOREif c2 != 0,否则是一个INSERT ... UPDATE,我认为这就是你想要的。

当然你可以根据你的需要调整它,不需要更新所有的列,或者对每一列使用相同的检查


推荐阅读