avatar
m*o
2
我用的是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的数据?
avatar
a*p
3
小人都是戴眼镜的。
avatar
n*6
4
没用过mysql,不知道以下几种方法是否对你有用。
Option1:
cursor
loop
If not exists (Select ... From ...)
Insert into ...
Option2:
Union, if not have to to use 'insert'.
avatar
x*l
5
小人戴大框眼镜可以增加几分有趣度。呵呵。

【在 a*******p 的大作中提到】
: 小人都是戴眼镜的。
avatar
c*e
6
脑筋太死了,你先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的数据?

avatar
B*g
7
然后参考本版关于remove dup的文章。

旦遇

【在 c*******e 的大作中提到】
: 脑筋太死了,你先insert,然后再处理不行吗
: 或者干脆直接就是set table

avatar
n*6
8
还可以先load to temptable, 处理好以后,再insert.这样对production table影响小。

【在 c*******e 的大作中提到】
: 脑筋太死了,你先insert,然后再处理不行吗
: 或者干脆直接就是set table

avatar
B*g
9
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的数据?

avatar
j*n
10
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的数据?

avatar
t*s
11
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的数据?

avatar
B*g
12
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

avatar
k*e
13
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.
avatar
B*g
14
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.

avatar
z*3
15
有个比较粗俗的方法,直接用程序写把code包在try{} catch(){} 里面,这样就算停止
了,但是下一个循环还是会调用try当中的代码。
avatar
f*e
16
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的数据?

avatar
a*x
18
如果用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的数据?

avatar
t*s
19
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"
avatar
d*h
20
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的数据?

avatar
B*g
21
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

avatar
m*i
22
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的数据?

avatar
t*s
23
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.

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。