0

列 value1、value2、および value3 を含むテーブルがあります。

数か月ごとに、すべての行の「value1」を別の値に変更する必要があります。これまでのところ、私は次のコードを持っていますが、なぜそれが機能しないのか、一生わかりません。列 1 のみを変更する代わりに、まったく新しい行の情報を生成します。

前もって感謝します。

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

2 に答える 2

1

句のUPDATEアクションは、ON DUPLICATE KEY挿入される行が UNIQUE 制約違反を引き起こす場合にのみ実行されます。つまり、テーブルに主キーまたは一意のインデックスが必要です。

既存の行を変更する場合は、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 に答える