MYSQL检查重复项,仅在另一个字段为特定值时插入

时间:2014-04-08 09:59:19

标签: mysql

如果我将数据插入到包含以下字段的表中:

serialNumber活跃国家/地区

如果active为no,我只需要插入重复的serialNumbers。

例如:我想插入一个带有serialNumber 1234的记录。

如果表格中已经存在序列号,请继续添加。如果它已经存在,请检查'有效'有效是肯定的,然后不添加新记录,如果不是,则添加记录。

如何在MYSQL中实现这一目标?

3 个答案:

答案 0 :(得分:2)

如果表缺少必要的唯一密钥而您没有权限,或者您不想设置所需的密钥,则可以使用此替代方法:

INSERT INTO `table1`
            (`field1`,
             `field2`)
SELECT value1,
       value2
FROM   (SELECT 1) t_1
WHERE  NOT EXISTS (SELECT 1
                   FROM   `table1`
                   WHERE  `field1` = value1
                      AND `field2` = value2);

对于你的问题,它可以写成

INSERT INTO `activity`
            (`serialNumbers`,
             `active`)
SELECT 1234,
       'yes'
FROM   (SELECT 1) t_1
WHERE EXISTS (SELECT 1
              FROM   `activity`
              WHERE  `serialNumbers` = 1234
                AND `active` = 'no');

答案 1 :(得分:1)

您可以在INSERT INTO查询后使用ON DUPLICATE KEY语句更新行(如果已存在)。文档:https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

INSERT INTO table (serialNumber , active, country) VALUES (1010, 'no', 'FR')
  ON DUPLICATE KEY UPDATE active='yes';

答案 2 :(得分:0)

您可以在MySQL中使用insert ... on duplicate key update。它类似于其他SQL数据库中使用的MERGE,但MySQL不提供MERGE语句,因此这是次佳的。

INSERT INTO TABLE (serialNumber, active, country) 
    VALUES (1234, 'active', 'GB') ON DUPLICATE KEY UPDATE country = 'ND';

另外,如果您不想生成错误,请使用INSERT IGNORE