回答

收藏

MySQL中的多个if语句触发

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

如果MySQL触发器中有多个if语句,那么最佳方法是什么?) U$ a8 J0 Q3 C
目前,我的SQL如下所示:+ `( r3 M- ~& u
IF NOT (NEW.status  OLD.status) THEN* u5 j) i9 r, n- }& r9 ^4 r
  {my sql}/ K# E. b6 T: O* I, I$ ]
ELSEIF NOT (NEW.actual  OLD.actual) THEN
) s. c, |& N: w) _% l$ p; w  {my sql}
# I+ u  [/ ]4 l9 V  y  YEND IF
7 h9 r& o" t; S. w乍看之下,这似乎行得通。但是,我注意到,当多个(else)if语句为true时,仅第一个语句被执行(例如,就像在PHP中一样)。
# i1 F# X9 @4 N- @9 ]/ u) e( H我如何只使用多个if,而不必是elseif,以便执行多于1条语句?用相同的动作创建多个触发器是不可能的,至少phpMyAdmin所示。将多个if置于一个触发器中会导致错误。) F2 t" Y. O: J/ V/ Z
               
  }/ \4 z# {' ^1 }: F8 z+ l解决方案:# s. O% ^$ t; N7 c' y9 e5 j
               
# d/ F* `2 {3 |- J+ B; R) i
( g* n' R( A4 d+ `+ D& U0 f, M& E, g$ ^! p1 F9 m
                弄清楚了。我没有使用phpMyAdmin中的可视GUI创建触发器,而是使用了普通SQL。
, `' _9 Q- w3 N8 b' O6 l' k所以我用了这个SQL:
3 Z8 X6 a; M7 \3 g2 C9 \delimiter //
, h. e" \2 V- x! t/ j6 ?create t1
# J5 g4 l: j. w' C1 y/ ~! Dafter update* s  [6 v# ]9 T4 o
on my_table$ U2 r! w9 s: U- n, s9 s+ v
for each row
! T9 H! k6 b1 M" t/ e: t, T; C  A- p    begin
4 {; ^; }( I1 ~7 |6 \" ]  P        IF (NEW.status  OLD.status) THEN
! F1 }& x' t+ ^* T$ D            {your sql}
* H* Y0 x) B1 o2 j# C' K        END IF;
  S1 B0 f" [7 T8 q  ]  h        IF (NEW.actual  OLD.actual) THEN6 i2 ^5 \. a7 ~5 L
            {your sql}7 t5 s% g8 J1 y! ?; |. |: f# s1 |
        END IF;     
! {$ w& X0 G. n! F; [! B    end;//
# v- s7 v# T* r% A, \$ Bdelimiter ;$ O9 }# S, f$ M/ X8 ^  p
哪个工作正常。在phpMyAdmin GUI中查找触发器时,我注意到这是因为begin和end;必须添加的原因。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则