如果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;必须添加的原因。