2012-02-13 83 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