MySQLの構文ON DUPLICATE KEY UPDATE単一の更新を使用して、ロットサイズのSQLの更新を増やすについて

シナリオ:

        インポートされたデータは、アドオンを存在しない場合に実際のアプリケーションでは、データをインポートする機能が頻繁に遭遇され、更新が変更して行われ、

ちょうど遭遇において、最初の反応は、2つに分け達成することである、すなわち、増加を決定するために、後で重複キー更新ステップにMySQLで見出さ判定更新が完了することができ、使用感は、あまりにも便利です

この文は、ユニークなプライマリキーまたはインデックスの使用に基づいて、フィールドなどは、一意のインデックスを追加され、テーブルにはすでにレコードが1で存在します。

例えば:

次の2つのステートメントは同じ効果を持ちます。

INSERT  INTO  テーブル(A、B、C)VALUES123 ON DUPLICATE KEY  UPDATE C = C + 1 
  
UPDATEの テーブル SET C = C + 1  WHERE = 1

ON DUPLICATE KEY UPDATEが複数のフィールドの後ろに置くことができ、カンマで区切って指定します。

例を再現。

INSERT  INTO  テーブル(A、B、C)VALUES123)、(456 ON DUPLICATE KEY  UPDATEの C = VALUES()+ VALUES(B)  

テーブルには、(増加または変更)2つのレコードを変更します。

単一の増加で行わまたはSQL MyBatisの文言を変更します:

<インサートID = "insertOrUpdateCameraInfoByOne" paramerType = "com.pojo.AreaInfo"> 
    camera_infoへの挿入(cameraId、zone1Id、zone1Name、zone2Id、zone2Name、zone3Id、zone3Name、zone4Id、zone4Name)
    VALUES(
        #{cameraId}、{#} zone1Id 、#{zone1Name}、#{zone2Id}、
        #{zone2Name}、#{zone3Id}、#{zone3Name}、
        #{zone4Id}、#{zone4Name})
    ON DUPLICATE KEY UPDATE 
    cameraId = VALUES(cameraId)、
    zone1Id = VALUES(zone1Id)、zone1Name = VALUES(zone1Name)、
    zone2Id = VALUES(zone2Id)、zone2Name = VALUES(zone2Name)、
    zone3Id = VALUES(zone3Id)、zone3Name = VALUES(zone3Name)、
    zone4Id= VALUES(zone4Id)、zone4Name = VALUES(zone4Name)
 </インサート>

次のようにMyBatisの中のSQLバッチが追加または変更されました:

<挿入ID = "insertOrUpdateCameraInfoByBatch"のParameterType = "java.util.Listに"> 
      camera_infoへの挿入(
          zone1Id、zone1Name、zone2Id、zone2Name、zone3Id、zone3Name、zone4Id、zone4Name、
          cameraId 
          )値
            <foreachのコレクション= "リスト"項目=」 cameraInfo "インデックス= "インデックス"セパレータ="、 "> 
                #{cameraInfo.zone1Id}、{#cameraInfo.zone1Name}、{#cameraInfo.zone2Id}、
                #{cameraInfo.zone2Name}、{#cameraInfo.zone3Id}、# {cameraInfo.zone3Name}、
                #{cameraInfo.zone4Id}、{#cameraInfo.zone4Name}、
                #{cameraInfo.cameraId} 
            </ foreachの>
           DUPLICATE KEY UPDATE ON
               zone1Id= VALUES(zone1Id)、zone1Name = VALUES(zone1Name)、zone2Id = VALUES(zone2Id)、
               zone2Name = VALUES(zone2Name)、zone3Id = VALUES(zone3Id)、zone3Name = VALUES(zone3Name)、
               zone4Id = VALUES(zone4Id)、zone4Name = VALUES(zone4Name)、
               cameraId = VALUES(cameraId)
     </インサート>
    

 

おすすめ

転載: www.cnblogs.com/ZJOE80/p/12151298.html