MySQL INSERT(如果不存在)(不使用主键)
技术问答
249 人阅读
|
0 人回复
|
2023-09-14
|
如果该 对 不存在,如何插入一行?
7 \/ i. V# P! H/ [( @, X( }*注意这些不是主键,我的主键设置为自动增量, 6 B4 p' M/ _; \, F% @. X# \/ x
尝试插入时忽略但不起作用. U" ?8 e) r: H! R. f6 A2 T
INSERT IGNORE INTO mytable (`myid`, `theirid`) VALUES ('5', '1')
* h, C) i+ g/ q0 l4 L$ fON DUPLICATE KEY & }, P7 T1 i! k6 e+ A% q
表格看起来像:1 U+ {) k5 @1 |( m% w) U
CREATE TABLE `mytable` (
T o: A6 g8 _% l6 i& ]1 X4 ^9 U `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
7 F7 P3 W/ H9 ]7 n7 o/ j* } `myid` bigint(20) NOT NULL,
' }/ W2 Q% {" h% D9 L8 |1 ]3 \! l! y `theirid` bigint(20) NOT NULL,7 g2 I% o1 O' J1 {+ w3 h
`activated` tinyint(1) NOT NULL DEFAULT '0',
m0 W. Q# f( F6 H3 S- Y8 B4 ] `dateStamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
6 ]5 e& f T/ U& T) q- B" `9 I PRIMARY KEY (`id`), t$ J1 d* Y6 X! V( g: s
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1$$
; ^1 H: A, y9 ?- Z
$ B) v$ F2 Y6 c) c9 L解决方案:
! D) f- |- S% {! Y- L6 f( ~
5 \0 I2 O! Q. N' E
P @. ` @! x2 h# w6 W1 N1 z- k# \7 F
1)您可以在上添加UNIQUE约束(myid, theirid)吗?如果是,请添加此约束并使用:
* t! i$ E8 B, c4 G# {6 EINSERT INTO mytable (myid, theirid)
! F8 x* D$ F, S4 P" O. n R- {! F VALUES (5, 1) ;
7 w( `5 T9 O- R" x并忽略产生警告(或将替换为INSERT IGNORE)' I) X. z* }. }/ s6 o8 k6 N
2)如果您不能添加这样的约束(例如,有时您希望允许这样的重复项而其他时候则不允许),则可以使用以下方法:
* x) C; H" A) X1 b) w; V* PINSERT INTO mytable (myid, theirid)
/ x6 U1 {; J: A8 Z) D- U SELECT 5, 1 9 C5 y2 H% `. ~( F- u* y/ p
FROM dual
1 G( s0 j5 a) y# D) h" R WHERE NOT EXISTS" N8 r o- V7 q6 c% z4 n" Z, B ]
( SELECT *
+ z( r* i2 q$ X3 A0 q) q9 @6 Q FROM mytable: p) f7 J' I' t& y
WHERE myid = 5( N0 O/ d% L {; P. t" F+ w! k
AND theirid = 1
0 j' Z, e: y7 ~% O" ~ ) ; |
|
|
|
|
|