シナリオ:
インポートされたデータは、アドオンを存在しない場合に実際のアプリケーションでは、データをインポートする機能が頻繁に遭遇され、更新が変更して行われ、
ちょうど遭遇において、最初の反応は、2つに分け達成することである、すなわち、増加を決定するために、後で重複キー更新ステップにMySQLで見出さ判定更新が完了することができ、使用感は、あまりにも便利です
この文は、ユニークなプライマリキーまたはインデックスの使用に基づいて、フィールドなどは、一意のインデックスを追加され、テーブルにはすでにレコードが1で存在します。
例えば:
次の2つのステートメントは同じ効果を持ちます。
INSERT INTO テーブル(A、B、C)VALUES(1、2、3 ) ON DUPLICATE KEY UPDATE C = C + 1 。 UPDATEの テーブル SET C = C + 1 WHERE = 1。
ON DUPLICATE KEY UPDATEが複数のフィールドの後ろに置くことができ、カンマで区切って指定します。
例を再現。
INSERT INTO テーブル(A、B、C)VALUES(1、2、3)、(4、5、6 ) 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) </インサート>