2016-11-28 159 views
0

發出批量文件insert statement時,我們如何忽略(禁用)DB和/或JDBC驅動程序引發的異常?批量插入Postgresql或MySQL時忽略重複約束條件

可以說,我想批量插入一些用戶和我有一個ID作爲唯一鍵

INSERT INTO users 
(id,name,age,email,pass_code) 
VALUES 
(1,'Mark',18,'[email protected]',123), 
(2,'Zak',18,'[email protected]',123), 
(3,'Djigi',18,'[email protected]',123), 

(1,'James Petkov',18,'[email protected]',123), --Duplicated by id ? 

(4,'Kinkinikin',18,'[email protected]',123), 
(5,'A bula bula ',18,'[email protected]',123), 
(6,'Shakazulo',18,'[email protected]',123); 

如何判斷髮動機的MySQL/PostgreSQL的繼續插入剩餘的記錄?

SQL支持SQL嗎?

+0

然後,不要將此ID作爲表格的主鍵。由於它無論如何都是重複的,所以讓MySQL分配一個ID。 –

+0

當你遇到錯誤時,你的問題更多關於繼續插入? –

+0

@TimBiegeleisen這些想法不是關於生成id,而是在插入重複記錄時抑制異常。 – Adelin

回答

1

在PostgreSQL,您可以用

INSERT ... ON CONFLICT (id) DO NOTHING; 

一個更普遍的解決方案是獨立運行每個INSERT和忽略錯誤忽略了失敗的行。