..


スポンサーリンク

INSERTと以下のクエリ... DUPLICATE KEY UPDATE ON

マックスボッシによって書かれた記事

と"正しいクエリ管理が安定的かつ効率的な実装の前提条件であることはよく知られています。
この記事ではあまり知られていないが、非常に強力な構文を提示する、私は、DUPLICATE KEY UPDATE句の話している。

この句はINSERTステートメントの実行中に使用されると、その目的は確認することですされ、挿入する前に、そこに主キー(主キー​​)または一意キー(​​UNIQUE KEY)の複製であり、これはエンジンが起こる場合un'UPDATE MySQLは代わりに挿入されます。

この句の利点は明白です:あなたは、 パフォーマンスとコードのクリーンアップの面でも長所ではなく、2つの単一のクエリを記述します。

の例をとってみましょう。 我々のサイトに訪問者のロギングを実行する簡単なスクリプトを作成するとします。 :私たちのDBのテーブル構造を以下に

  • IP(キー)
  • numero_visite
  • ultima_visita
照会する(現在のIPではない)答えが負の場合にのみ、通常のロジックによると、我々が持っている私達のページに転送中のすべてのIPを記録するIPは、DBにされていないことを選択した最初の予備的なチェックを行うとしたい挿入。

構文のINSERTのおかげで... ON DUPLICATE KEY UPDATEを... ...我々は、単一のクエリと同じ結果を得ることができます。

 



 ip_visitatori値にINSERT('123 .123.123.123'、1、NOW())

 





 KEY DPLICATE ON







 UPDATE numero_visite numero_visite = + 1、ultima_visita = NOW();

 
このように、IPが包含が行われている場合、そうでなければ、影響を受けたレコードの単純な更新を実行します。 この構文を使用すると、30%に相当するパフォーマンスの面で利益を得ることができます。

問題の条項の"少しの想像力と創意工夫で様々な状況で非常に有用がある場合もあります。
例えば、我々は、条件と組み合わせて使用​​することができます。 ここでは例です:次のような構造の仮想的なオンラインオークションサイトのテーブルがあるとします。

  • ID_asta
  • migliore_offerta
オークションはすでにそこに簡単なアップグレードとなるが、オファーがすでにあるものよりも高い場合だけでしょうが提供されている場合は、新しい提案の配置を続行するとします。
 



 VALUES(1、120)INSERT INTOを提供しています

 





 KEY DPLICATE ON







 UPDATE migliore_offerta = IF(VALUES(migliore_offerta)<120、120、VALUES(migliore_offerta))

 
我々は一つに解決し、単純なクエリを介して一挙に落ちた... そうでなければ我々は資源の結果として廃棄物(およびエラーのリスクが大きい)でいくつかのクエリを使用する必要がありました。

同じカテゴリの...
E -ラーニング
MS Accessの(上級) MS Accessの(上級)
迅速かつ簡単にデータベースを作成および管理する方法を学びます。 29€から開始。
MySQLの(コース) MySQLの(コース)
オープンソースのデータベースの管理。 39€から。
SQLとデータベース(コース) SQLとデータベース(コース)
リレーショナルデータベースを作成および管理。 39€から。
スポンサーリンク