ON DUPLICATE KEY UPDATE
を使用しました 多くの。状況によっては、実際に使用する価値のある非標準のSQL拡張機能です。
まず、一意のキー制約が設定されていることを確認する必要があります。 ON DUPLICATE KEY UPDATE
関数は、一意のキー違反があった場合にのみ機能します。
一般的に使用される形式は次のとおりです。
$query = "INSERT INTO $table (column1, column2, column3)
VALUES ('value-1', 'value-2', 'value-3')
ON DUPLICATE KEY UPDATE
column1 = values(column1),
column2 = values(column2),
column3 = values(column3);"
column1 = values(column1)
「クエリが重複キー違反にヒットしなかった場合に挿入されたであろう値でcolumn1を更新する」を意味します。つまり、column1を、挿入が機能した場合の値に更新することを意味します。
このコードを見ると、挿入しようとしている3つの列すべてを更新しているのは正しくないようです。どの列に固有の制約がありますか?
編集:OPからの質問ごとにmysql挿入ステートメントの「SET」形式に基づいて変更します。
基本的にON DUPLICATE KEY UPDATE
を使用します 、通常どおりに挿入ステートメントを記述しますが、ON DUPLICATE KEY UPDATE
を追加します。 節は最後に付けられました。私はそれがこのように機能するはずだと信じています:
INSERT INTO $table
set column1 = 'value-1',
column2 = 'value-2',
column3 = 'value-3'
ON DUPLICATE KEY UPDATE
column1 = values(column1),
column2 = values(column2),
column3 = values(column3);
繰り返しますが、挿入する列の1つには、一意のインデックス(または列の組み合わせ)が必要です。これは、そのうちの1つが主キーであるか、テーブルに一意のインデックスがあることが原因である可能性があります。