触发器实际使用时容易碰到的几个小坑
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,而实际上显然是不存在此系统变量的于是报错。