尝试多次插入并获取失败的ID列表

时间:2013-02-25 08:17:41

标签: mysql sql

在MySQL中,您可以在表中插入多行并获取成功或失败的行的列表吗?

或者您必须在其自己的语句中单独插入每一行,以确定插入是否成功?

(可以批量提交多个插入,但每个插件的成功是否在其他DB中单独占用?例如PostgreSQL?)

1 个答案:

答案 0 :(得分:5)

执行批量插入时无法找出哪些行失败。通常,如果您进行多次插入并且其中一次因任何原因而失败,则查询将失败。

但是,您可以采取一些选项来确保查询成功。

1)使用REPLACE INTO而不是INSERT INTO。如果主键已经存在,这将导致MySQL过度写入现有行。

2)使用INSERT IGNORE INTO跳过现有行。缺点是你不知道哪些行被跳过。

3)使用INSERT INTO ... ON DUPLICATE KEY UPDATE ...。这将允许您更新已存在的行的一个,两个或所有字段。如果您有一个空字段,也可以将其用作伪故障指示符。

// 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;