回答

收藏

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" ~        ) ;
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则