MySQLで実際にINSERTされたレコード数
INSERT INTO animals (id,name) VALUES (1,"dog"),(2,"cat"), ... ON DUPLICATE KEY UPDATE name = VALUES(name)
みたいなクエリで重複することなく新規にINSERTされたレコード数は、VALUES
句の要素数とROW_COUNT()
とから算出できる。
VALUES
句の要素数がvalues_count
、発行直後のROW_COUNT()
の返り値がrow_count
のとき、新規にINSERTされたレコード数inserted_count
と重複によって更新されたレコード数updated_count
の間には次の関係が成り立つ。
inserted_count + updated_count = values_count inserted_count + 2 * updated_count = row_count
この連立方程式を解くと
inserted_count = 2 * values_count - row_count updated_count = row_count - values_count
となる。
よって重複することなく新規にINSERTされたレコード数は2 * VALUES句の要素数 - ROW_COUNT()
で決まる。