1

INSERT INTO ... ON DUPLICATE KEY UPDATEクエリがありますが、少なくとも私が知る限り、何らかの理由でmysqlサーバーによって無視されています。

既存の行の更新をキャッチしています。

「id」の主キーがあり、part_noはUniqueとしてリストされています。

クエリは次のとおりです。

INSERT INTO parts_prices (cost, 
chatsworth, 
atlanta,
north_carolina,
new_jersey,
arizona, 
colorado,
miami,
indianapolis, 
ohio, 
oregon,
dallas,
san_antonio,
washington,
memphis,
alt_sup,
part_no)
VALUES (0.00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 'HS3163')
ON DUPLICATE KEY UPDATE 
cost=VALUES(cost), chatsworth=VALUES(chatsworth), atlanta=VALUES(atlanta), north_carolina=VALUES(north_carolina), new_jersey=VALUES(new_jersey), arizona=VALUES(arizona), colorado=VALUES(colorado), miami=VALUES(miami),
indianapolis=VALUES(indianapolis), ohio=VALUES(ohio), oregon=VALUES(oregon), dallas=VALUES(dallas), san_antonio=VALUES(san_antonio), washington=VALUES(washington), memphis=VALUES(memphis), alt_sup=VALUES(alt_sup)

最初の列は小数で、次にintの束であり、最後の2つはvarcharsです。これは部品リストデータベースのエントリです(部品番号はたまたまリストされていますが、実際にはまだありません)。(last_modified列を使用して)すべての部品番号のリストを反復処理していますが、この特定のクエリはタイムスタンプを更新しません。

これは、行の情報が実際に変更されていないためでしょうか(指定されたすべての値が初期値と同じです)。

クエリは、データベース内の(かなりの数の)以前のエントリに対して機能しました。

[編集]PHPスクリプトからのクエリで応答エラーをチェックしましたが、直接(phpmyadminを使用して)エラー文字列を返しません。[/編集]

4

1 に答える 1

2

on update current_timestamp列の少なくとも 1 つが実際に更新された場合にのみ有効になります。既にある値で行を更新しようとしても、更新としてカウントされず (影響を受ける行数は変更されません)、有効になりon updateません。

last_modified=now()更新に手動で追加する方が信頼性が高くなります。

于 2012-10-16T18:58:47.230 に答える