我有一張3列的表。每個都有一個唯一的索引。當不允許重複時,MySQL會多次插入。
我想一次做多個插入(300條記錄彈出)。當出現重複條目時,它將取消整個插入。這意味着如果300中有1個是重複的,則不會插入它們。
有沒有辦法解決這個問題?
我有一張3列的表。每個都有一個唯一的索引。當不允許重複時,MySQL會多次插入。
我想一次做多個插入(300條記錄彈出)。當出現重複條目時,它將取消整個插入。這意味着如果300中有1個是重複的,則不會插入它們。
有沒有辦法解決這個問題?
嘗試將您的查詢從INSERT INTO ...
更改爲INSERT IGNORE INTO ...
。這會導致任何錯誤成爲警告,並且應插入其他記錄。
使用事務:http://dev.mysql.com/doc/refman/5.0/en/commit.html
START TRANSACTION
// DO QUERIES
COMMIT
如果在任何中進行查詢出錯,沒有記錄將被提交。
如果你想忽略錯誤。從你的mysql命令行使用--force
我認爲OP想要的是相反的......他正在做一個多重插入,並且整個插入語句由於一個錯誤的記錄而死亡。 – 2012-02-13 18:10:44
我已更新我的回答以反映此問題。 – 2012-02-13 18:14:26
如果你的插入是冪等的,update or replace
會幫助你。
鑑於它們很可能沒有,所以沒有任何超級有效的方法可以做到這一點,而不會退回到插入單獨的行作爲回退 - 以隔離問題行。
如果您正在批量插入以減少客戶端到服務器的延遲,請考慮使用stored procedure獲取行,並在服務器端插入一次獲取所有數據;可以有一個後備,逐行地進行適當的錯誤處理。
當然,假設在服務器端可以完成一些有意義的錯誤處理,而無需與客戶端進行同步通信。
您可以使用這樣的事情:
INSERT INTO table (username, id)
VALUES
('john', 1),
('jim', 2),
('mary', 3),
('jack', 4),
('helen', 4) ON DUPLICATE KEY IGNORE
如果要被替換的條目,使用UPDATE而不是忽略不計。
MySQL沒有'ON DUPLICATE KEY IGNORE'。它只支持'ON DUPLICATE KEY UPDATE'。 – 2012-02-13 18:19:07
謝謝,去了這個。似乎工作得很好。 – Steve 2012-02-14 00:01:46