m******o 发帖数: 61 | 1 我用的是mysql,有一个table:
columnA, columnB
1,a
2,b
我要create一个batch insert,里面有可能已经有1,a 和2,b. 这种情况我不想再
insert进去了。我试着加了个unique key 在columnA+columnB,可是这样的话,一旦遇
到duplicate的数据,mysql就停止insert了。 请问怎样让mysql继续insert那些不
duplicate的数据? |
n********6 发帖数: 1511 | 2 没用过mysql,不知道以下几种方法是否对你有用。
Option1:
cursor
loop
If not exists (Select ... From ...)
Insert into ...
Option2:
Union, if not have to to use 'insert'. |
c*******e 发帖数: 8624 | 3 脑筋太死了,你先insert,然后再处理不行吗
或者干脆直接就是set table
【在 m******o 的大作中提到】 : 我用的是mysql,有一个table: : columnA, columnB : 1,a : 2,b : 我要create一个batch insert,里面有可能已经有1,a 和2,b. 这种情况我不想再 : insert进去了。我试着加了个unique key 在columnA+columnB,可是这样的话,一旦遇 : 到duplicate的数据,mysql就停止insert了。 请问怎样让mysql继续insert那些不 : duplicate的数据?
|
B*****g 发帖数: 34098 | 4 然后参考本版关于remove dup的文章。
旦遇
【在 c*******e 的大作中提到】 : 脑筋太死了,你先insert,然后再处理不行吗 : 或者干脆直接就是set table
|
n********6 发帖数: 1511 | 5 还可以先load to temptable, 处理好以后,再insert.这样对production table影响小。
【在 c*******e 的大作中提到】 : 脑筋太死了,你先insert,然后再处理不行吗 : 或者干脆直接就是set table
|
B*****g 发帖数: 34098 | 6 google is your best friend.
http://www.devshed.com/c/a/MySQL/Error-Handling-Examples/
发包子
【在 m******o 的大作中提到】 : 我用的是mysql,有一个table: : columnA, columnB : 1,a : 2,b : 我要create一个batch insert,里面有可能已经有1,a 和2,b. 这种情况我不想再 : insert进去了。我试着加了个unique key 在columnA+columnB,可是这样的话,一旦遇 : 到duplicate的数据,mysql就停止insert了。 请问怎样让mysql继续insert那些不 : duplicate的数据?
|
j*****n 发帖数: 1781 | 7 LEFT JOIN
【在 m******o 的大作中提到】 : 我用的是mysql,有一个table: : columnA, columnB : 1,a : 2,b : 我要create一个batch insert,里面有可能已经有1,a 和2,b. 这种情况我不想再 : insert进去了。我试着加了个unique key 在columnA+columnB,可是这样的话,一旦遇 : 到duplicate的数据,mysql就停止insert了。 请问怎样让mysql继续insert那些不 : duplicate的数据?
|
t*****s 发帖数: 124 | 8 if the version of mysql is 4.1 or later
you can use following insert syntax:
Insert ... On Duplicate Key Update
【在 m******o 的大作中提到】 : 我用的是mysql,有一个table: : columnA, columnB : 1,a : 2,b : 我要create一个batch insert,里面有可能已经有1,a 和2,b. 这种情况我不想再 : insert进去了。我试着加了个unique key 在columnA+columnB,可是这样的话,一旦遇 : 到duplicate的数据,mysql就停止insert了。 请问怎样让mysql继续insert那些不 : duplicate的数据?
|
B*****g 发帖数: 34098 | 9 can this syntax ignore the duplicate without insert a diff value.
【在 t*****s 的大作中提到】 : if the version of mysql is 4.1 or later : you can use following insert syntax: : Insert ... On Duplicate Key Update
|
k********e 发帖数: 702 | 10 Yes!
It's mysql specific. not standard SQL, but it works on mysql.
【在 B*****g 的大作中提到】 : can this syntax ignore the duplicate without insert a diff value.
|
|
|
B*****g 发帖数: 34098 | 11 so we can have no code is after "On Duplicate Key Update"
【在 k********e 的大作中提到】 : Yes! : It's mysql specific. not standard SQL, but it works on mysql.
|
z*3 发帖数: 33 | 12 有个比较粗俗的方法,直接用程序写把code包在try{} catch(){} 里面,这样就算停止
了,但是下一个循环还是会调用try当中的代码。 |
f*****e 发帖数: 5177 | 13 DECLARE CONTINUE HANDLER FOR SQLSTATE '23000'
【在 m******o 的大作中提到】 : 我用的是mysql,有一个table: : columnA, columnB : 1,a : 2,b : 我要create一个batch insert,里面有可能已经有1,a 和2,b. 这种情况我不想再 : insert进去了。我试着加了个unique key 在columnA+columnB,可是这样的话,一旦遇 : 到duplicate的数据,mysql就停止insert了。 请问怎样让mysql继续insert那些不 : duplicate的数据?
|
B*****g 发帖数: 34098 | 14 peng
http://www.mitbbs.com/article/Database/31141284_3.html
【在 f*****e 的大作中提到】 : DECLARE CONTINUE HANDLER FOR SQLSTATE '23000'
|
a****x 发帖数: 231 | 15 如果用A+B作primary key的话,可以考虑用
Insert ignore into
或者
Replace into
【在 m******o 的大作中提到】 : 我用的是mysql,有一个table: : columnA, columnB : 1,a : 2,b : 我要create一个batch insert,里面有可能已经有1,a 和2,b. 这种情况我不想再 : insert进去了。我试着加了个unique key 在columnA+columnB,可是这样的话,一旦遇 : 到duplicate的数据,mysql就停止insert了。 请问怎样让mysql继续insert那些不 : duplicate的数据?
|
t*****s 发帖数: 124 | 16 no, there must be some code after "On Dulicate Key Update"
but you can update an unimportant field there
【在 B*****g 的大作中提到】 : so we can have no code is after "On Duplicate Key Update"
|
d*h 发帖数: 2347 | 17 use REPLACE INTO ... (mysql only SQL extension).
【在 m******o 的大作中提到】 : 我用的是mysql,有一个table: : columnA, columnB : 1,a : 2,b : 我要create一个batch insert,里面有可能已经有1,a 和2,b. 这种情况我不想再 : insert进去了。我试着加了个unique key 在columnA+columnB,可是这样的话,一旦遇 : 到duplicate的数据,mysql就停止insert了。 请问怎样让mysql继续insert那些不 : duplicate的数据?
|
B*****g 发帖数: 34098 | 18 I don't know much about mysql and I don't have an environment to test.
I am thinking this one will always insert an record. When dup key, update
one of the key to a new value then insert.
All above is guess.
【在 t*****s 的大作中提到】 : no, there must be some code after "On Dulicate Key Update" : but you can update an unimportant field there
|
m***i 发帖数: 2480 | 19 Some straight forward way:
Put all your new data into a temp table X.
delete all rows in X which are already in the Dest table
delete X from X Join Dest where X.A = Dest.A and X.B = Dest.B
insert all records in X to the Dest table
insert into Dest select * from X
【在 m******o 的大作中提到】 : 我用的是mysql,有一个table: : columnA, columnB : 1,a : 2,b : 我要create一个batch insert,里面有可能已经有1,a 和2,b. 这种情况我不想再 : insert进去了。我试着加了个unique key 在columnA+columnB,可是这样的话,一旦遇 : 到duplicate的数据,mysql就停止insert了。 请问怎样让mysql继续insert那些不 : duplicate的数据?
|
t*****s 发帖数: 124 | 20 haha, your guess is incorrect
only update, no insert
【在 B*****g 的大作中提到】 : I don't know much about mysql and I don't have an environment to test. : I am thinking this one will always insert an record. When dup key, update : one of the key to a new value then insert. : All above is guess.
|