MySQLバッチ挿入ユニークインデックス回避方法(重複データのインポートを回避)

2857 ワード

MySQLバッチ挿入ユニークインデックス回避方法(重複データのインポートを回避)
重複データのインポートは回避されていません.一意のインデックスを作成して一括挿入を防止することを推奨します.一意のインデックスに遭遇した場合は、次の3つの方法で回避できます.
  • (一)差分データをインポートし、重複データを無視し、IGNORE INTOの使用
  • (二)重複データのインポートと上書き、REPLACE INTOの使用
  • (三)重複データ保持未指定フィールドのインポート、INSERT INTO ON DUPLICATE KEY UPDATEの使用
  • .
    表test 1
    id
    user_id
    user_name
    user_type
    1
    101
    101
    1
    2
    102
    102
    2
    3
    103
    103
    3
    表test 2
    id
    user_id
    user_name
    user_type
    1
    201
    201
    1
    2
    202
    202
    2
    3
    203
    203
    3
    4
    101
    204
    4
    (一)第一の方式で導入し、IGNORE INTOの使用:
    INSERT IGNORE INTO test1(user_id,user_name,user_type) 
    SELECT user_id,user_name,user_type FROM test2;
    

    表test 1の結果は以下の通りである
    id
    user_id
    user_name
    user_type
    1
    101
    101
    1
    2
    102
    102
    2
    3
    103
    103
    3
    4
    201
    201
    1
    5
    202
    202
    2
    6
    203
    203
    3
    表2のid=4のレコードは無視され,インポートされない.
    (二)第二の方式で導入し、REPLACE INTOの使用
    REPLACE INTO test1(user_id,user_name,user_type) 
    SELECT user_id,user_name,user_type FROM test2;
    

    表test 1の結果は以下の通りである
    id
    user_id
    user_name
    user_type
    2
    102
    102
    2
    3
    103
    103
    3
    4
    201
    201
    1
    5
    202
    202
    2
    6
    203
    203
    3
    7
    101
    204
    4
    上の図から、user_id=101のデータが変化した.インポートで重複が見つかった場合は、削除してから挿入します.
    インポート時にカラムが指定されていない場合、指定されていないカラムのデータは(Null)に置き換えられます.
    REPLACE INTO test1(user_id,user_name) 
    SELECT user_id,user_name FROM test2;
    

    表test 1の結果は以下の通りである
    id
    user_id
    user_name
    user_type
    2
    102
    102
    2
    3
    103
    103
    3
    4
    201
    201
    (Null)
    5
    202
    202
    (Null)
    6
    203
    203
    (Null)
    7
    101
    204
    (Null)
    (三)第三の方式で導入し、INSERT INTO ON DUPLICATE KEY UPDATEの使用
    INSERT INTO test1(user_id,user_name,user_type) 
    SELECT user_id,user_name,user_type FROM test2 
    ON DUPLICATE KEY UPDATE 
    test1.user_name = test2.user_name;
    

    表test 1の結果は以下の通りである
    id
    user_id
    user_name
    user_type
    1
    101
    204
    1
    2
    102
    102
    2
    3
    103
    103
    3
    4
    201
    201
    1
    5
    202
    202
    2
    6
    203
    203
    3
    上の図のようにuser_のみid=101のuser_nameは変わりましたがtest 1テーブルのuser_を保持しますtypeフィールド.複数のフィールドを更新し、後から追加すればよい.
    INSERT INTO test1(user_id,user_name,user_type) 
    SELECT user_id,user_name,user_type FROM test2 
    ON DUPLICATE KEY UPDATE 
    test1.user_name = test2.user_name,
    test1.user_type = test2.user_type;