我有一个包含列value1,value2和value3的表。
每隔几个月,所有行都需要将'value1'更改为不同的值。到目前为止,我有以下代码,我无法弄清楚为什么它不起作用的生活。它不是仅修改第一列,而是生成一整行新信息。
提前致谢。
INSERT INTO table (value1, value2, value3)
VALUES ('$valueForValue1', '$valueForValue2','$valueForValue3')
ON DUPLICATE KEY UPDATE
`value1`='$valueForValue1',
`value2`='$valueForValue2',
`value3`='$valueForValue3',
答案 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 演示