2012-02-13 84 views
6

我有一张3列的表。每个都有一个唯一的索引。当不允许重复时,MySQL会多次插入。

我想一次做多个插入(300条记录弹出)。当出现重复条目​​时,它将取消整个插入。这意味着如果300中有1个是重复的,则不会插入它们。

有没有办法解决这个问题?

回答

8

尝试将您的查询从INSERT INTO ...更改为INSERT IGNORE INTO ...。这会导致任何错误成为警告,并且应插入其他记录。

+0

谢谢,去了这个。似乎工作得很好。 – Steve 2012-02-14 00:01:46

0

使用事务:http://dev.mysql.com/doc/refman/5.0/en/commit.html

START TRANSACTION // DO QUERIES COMMIT

如果在任何中进行查询出错,没有记录将被提交。

如果你想忽略错误。从你的mysql命令行使用--force

+0

我认为OP想要的是相反的......他正在做一个多重插入,并且整个插入语句由于一个错误的记录而死亡。 – 2012-02-13 18:10:44

+0

我已更新我的回答以反映此问题。 – 2012-02-13 18:14:26

1

如果你的插入是幂等的,update or replace会帮助你。

鉴于它们很可能没有,所以没有任何超级有效的方法可以做到这一点,而不会退回到插入单独的行作为回退 - 以隔离问题行。

如果您正在批量插入以减少客户端到服务器的延迟,请考虑使用stored procedure获取行,并在服务器端插入一次获取所有数据;可以有一个后备,逐行地进行适当的错误处理。

当然,假设在服务器端可以完成一些有意义的错误处理,而无需与客户端进行同步通信。

0

您可以使用这样的事情:

INSERT INTO table (username, id) 
      VALUES 
      ('john', 1), 
      ('jim', 2), 
      ('mary', 3), 
      ('jack', 4), 
      ('helen', 4) ON DUPLICATE KEY IGNORE 

如果要被替换的条目,使用UPDATE而不是忽略不计。

+0

MySQL没有'ON DUPLICATE KEY IGNORE'。它只支持'ON DUPLICATE KEY UPDATE'。 – 2012-02-13 18:19:07