0

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

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

提前致谢。

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

2 回答 2

1

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

如果你想修改现有的行,你真的很想使用 UPDATE 语句。

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

UPDATE mytable
   SET col1 = 'newvalue'
 WHERE col1 = 'oldvalue'
于 2013-11-09T05:22:00.777 回答
1

为了能够更改value1withON DUPLICATE KEY子句的值,您必须具有UNIQUE约束或PRIMARY KEYon (value2, value3)

ALTER TABLE table1 ADD UNIQUE (value2, value3);

现在为了简化您的插入语句,您也可以VALUES()ON DUPLICATE KEY这样使用

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

这是SQLFiddle演示

于 2013-11-09T20:22:55.763 回答