MySqlでINSERT INTO文を用いて複数のデータを更新した例

1409 ワード

複数のデータを挿入するとinsertは複数の文をサポートすることを知っています.
 
  
INSERT INTO t_member (id, name, email) VALUES
    (1, 'nick', '[email protected]'),
    (4, 'angel','[email protected]'),
    (7, 'brank','[email protected]');

ただし、更新レコードの場合、update構文は一度に複数のレコードを更新することをサポートしていないため、1つ1つしか実行できません.
 
  
UPDATE t_member SET name='nick', email='[email protected]' WHERE id=1;
UPDATE t_member SET name='angel', email='[email protected]' WHERE id=4;
UPDATE t_member SET name='brank', email='[email protected]' WHERE id=7;

ここで問題が発生し,このupdateリストが非常に大きい場合(例えば5000件)には,この実行率が予想される.
ここではMySqlでINSERT構文にはDUPLICATE KEY UPDATEという条件がありますが、この構文は、記録が存在するか否かを判断し、存在しない場合は存在を挿入して更新するための記録に適しています.
具体的な構文については、次の項目を参照してください.http://dev.mysql.com/doc/refman/5.0/en/insert.html
このような状況に基づいて、更新レコードに対してはinsert文が使用されますが、プライマリ・キーの重複を制限すると、フィールドが更新されます.次のようになります.
 
  
INSERT INTO t_member (id, name, email) VALUES
    (1, 'nick', '[email protected]'),
    (4, 'angel','[email protected]'),
    (7, 'brank','[email protected]')
ON DUPLICATE KEY UPDATE name=VALUES(name), email=VALUES(email);

注意:ON DUPLICATE KEY UPDATEはMySQL特有の文法であり、SQL標準文法ではありません.