MySQL では、テーブルに複数の行を挿入して、成功または失敗した行のリストを取得できますか?
それとも、挿入が成功したかどうかを判断するために、各行をそれぞれのステートメントに個別に挿入する必要がありますか?
(複数の挿入をバッチで送信できますが、それぞれの成功は他の DB で個別に説明されますか? PostgreSQL など?)
一括挿入の実行時に失敗した行を見つける方法はありません。通常、複数の挿入を行っていて、そのうちの 1 つが何らかの理由で失敗すると、クエリは失敗します。
ただし、クエリを確実に成功させるために使用できるオプションがいくつかあります。
1)REPLACE INTO
ではなくを使用しINSERT INTO
ます。これにより、主キーが既に存在する場合、MySQL は既存の行を上書きします。
2)INSERT IGNORE INTO
既存の行をスキップするために使用します。欠点は、どの行がスキップされたかがわからないことです。
3) を使用しINSERT INTO ... ON DUPLICATE KEY UPDATE ...
ます。これにより、すでに存在する行の 1 つ、2 つ、またはすべてのフィールドを更新できます。空のフィールドがある場合は、おそらくこれを疑似障害インジケーターとして使用することもできます。
// clear out failures from previous runs
UPDATE table SET failures = 0;
// insert the row if we can, otherwise record the failure and move on without updating the row
INSERT INTO table
(id, name) VALUES
(1, 'John'),
(2, 'Steve'),
...
(500, 'Tim')
ON DUPLICATE KEY UPDATE failures = failures + 1;
// check failures
SELECT id, name, failures FROM table;