回答

收藏

SQLite INSERT-重复键更新(UPSERT)

技术问答 技术问答 62 人阅读 | 0 人回复 | 2023-09-13

MySQL有这样的东西:
' u% D! L. {0 ~# Z" E# o% Y% \INSERT INTO visits (ip, hits)' j/ c, C+ G( O$ }; w
VALUES ('127.0.0.1', 1)& ?9 e- ]& g  ~3 c3 \! j/ f
ON DUPLICATE KEY UPDATE hits = hits + 1;3 i/ j& ^( j& n0 V) x5 O2 c7 X) F* N
据我所知,SQLite中不存在此功能,我想知道的是,是否有任何方法可以实现相同的效果而不必执行两个查询。另外,如果这不可能,那么您更喜欢什么:
7 j& ?3 g; E! C[ol]SELECT +(插入或更新)
' L3 R& ^8 p; V* tUPDATE( 如果UPDATE失败,则 + INSERT )( |1 R) x6 s1 y+ C
[/ol]
5 G( h$ J, D! V. l- [6 C               
  J8 H. }9 X+ T% [2 E/ S解决方案:
. k/ V; R0 y) S/ d, Z               
# @* g1 o, ?) g
; F2 u: u3 b" P  Y1 ^
& F. L* Y; }; N1 n- v$ l! g! Q/ F                由于3.24.0
* E/ ~  G; _0 k" O- PSQLite还支持upsert,因此现在您可以简单地编写以下内容
3 C; b, H/ G! d+ Z1 c- C! J4 bINSERT INTO visits (ip, hits)
* O. d$ i5 Z9 C# g8 ~VALUES ('127.0.0.1', 1)+ _% e$ T$ m( n' I/ L# ~: L* \
ON CONFLICT(ip) DO UPDATE SET hits = hits + 1;
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则