1

この質問は、「ベストプラクティス」に関するものですが、潜在的な問題の検索についても説明しています。複数のクエリを実行したり、非常に複雑なクエリを使用したりせずに、複数のフィールドで更新を実行し、異なる値を割り当てることができるようにしたいと思います。したがって、私が行ったことは、主キーと「名前」列を一意のキーとして持つテーブルを作成することです。

これで、異なる値で複数の列を更新する場合、次のようなクエリを実行できます。

INSERT INTO my_table (name, description) VALUES ('name', 'mydescription'), ('name2', 'description2') ON DUPLICATE KEY UPDATE description = VALUES(description)

これは悪い考えですか?これを行うためのより良い方法はありますか?標準警察は私を逮捕するつもりですか?


編集:競合状態であるという、これに関する1つの潜在的な問題に気づきました。別のユーザーが行を編集しているときに1人のユーザーが行を削除して情報を保存すると、編集によって行が再作成されます。(これは機能またはバグとして使用できます。)

4

1 に答える 1

2

上記の私のコメント(レコードが存在することがわかっている場所を使用することによるパフォーマンスへの影響について別の投稿者がアドバイスする質問へのリンク)に加えて、次を使用して定数から具体化されたテーブルでINSERT ... ON DUPLICATE KEY UPDATE複数テーブル構文を使用できます。UPDATEUNION

UPDATE my_table JOIN (
    SELECT 'name' AS name, 'mydescription' AS description
  UNION ALL
    SELECT 'name2', 'description2'
) t USING (name) SET my_table.description = t.description
于 2012-08-24T19:17:34.623 に答える