检测插入时MySQL是否有重复项

时间:2013-11-09 04:56:03

标签: mysql sql insert duplicates

我有一个包含列value1,value2和value3的表。

每隔几个月,所有行都需要将'value1'更改为不同的值。到目前为止,我有以下代码,我无法弄清楚为什么它不起作用的生活。它不是仅修改第一列,而是生成一整行新信息。

提前致谢。

INSERT INTO table (value1, value2, value3)
            VALUES ('$valueForValue1', '$valueForValue2','$valueForValue3')
            ON DUPLICATE KEY UPDATE
                `value1`='$valueForValue1',
                `value2`='$valueForValue2',
                `value3`='$valueForValue3',

2 个答案:

答案 0 :(得分:1)

只有在插入的行会导致违反UNIQUE约束时,才会执行UPDATE子句的ON DUPLICATE KEY操作。这意味着桌面上需要有主键或唯一索引。

如果要修改现有行,则确实需要使用UPDATE语句。

要更改现有行列中的值,将'oldvalue'替换为'newvalue',您可以执行以下操作:

UPDATE mytable
   SET col1 = 'newvalue'
 WHERE col1 = 'oldvalue'

答案 1 :(得分:1)

为了能够使用value1子句更改ON DUPLICATE KEY的值,您必须在UNIQUE上设置PRIMARY KEY约束或(value2, value3)

ALTER TABLE table1 ADD UNIQUE (value2, value3);

现在为了简化您的插入声明,您还可以VALUES()使用ON DUPLICATE KEY这样的<{p}}

INSERT INTO Table1 (`value1`, `value2`, `value3`)
VALUES ('$valueForValue1', '$valueForValue2', '$valueForValue3')
ON DUPLICATE KEY UPDATE value1 = VALUES(value1);

这是 SQLFIddle 演示