触发器实际使用时容易碰到的几个小坑

Can't update table XXX in stored function/trigger because it is already used by statement which invoked this

原因是在update触发时使用update语句,导致循环调用。直接使用set可以避免此问题。

以下为正确语句(MySQL)

DELIMITER $$

CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
TRIGGER `dev_push`.`set_godcode` BEFORE UPDATE
ON `dev_push`.`sms_checkcode`
FOR EACH ROW BEGIN
IF new.mobile = '13858006234'
 THEN
SET new.check_code = '1234';
END IF;
END$$

DELIMITER ;

 

另外需要避免的是,使用判断条件,无论是where,或者如上语句使用if判断,都应使用new.mobile,如果直接用mobile会当做系统变量System variable,而实际上显然是不存在此系统变量的于是报错。

posted @ 2015-05-29 15:48  当年  阅读(369)  评论(0编辑  收藏  举报