mysql 触发器 if 语句 update

如题所述

@sqlz
='select
asd
from
flkg';
EXECUTE(@sqlz);
----------
首先,mysql下动态语句不是这样写的,另外,触发器里不能允许返回结果集的.
这里我是希望他能中断更新!
---------------------
你的意思是不是要中断后面的
"
SET
amount
=@amountmm
WHERE
CODE=new.code
AND
whcode
=
new.whcode
;
"
这部分?
如果是的话,那这样改下:
DELIMITER
$$
USE
`eerp`$$
DROP
TRIGGER
/*!50032
IF
EXISTS
*/
`material_update`$$
CREATE
TRIGGER
`material_update`
AFTER
UPDATE
ON
`sf_material`
FOR
EACH
ROW
BEGIN
IF
new.auditing
=
'Y'
THEN
SET
@amountmm
=
(SELECT
amount-new.amount
FROM
warehouse
WHERE
CODE=new.code
AND
whcode
=
new.whcode);
IF
@amountmm
>=0
THEN
UPDATE
warehouse
SET
amount
=@amountmm
WHERE
CODE=new.code
AND
whcode
=
new.whcode
;
END
IF
;
END
IF;
END;
$$
DELIMITER
;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
"我是要中断更新。。不是后面。。。严格说就是这个表sf_material更新和后面的那个表warehouse更新也一起中断!"
---------------------------------------------------------------
因为mysql下触发器内不支持rollback,所以,变换一个方式来处理,如下:
那触发器部分这么写(注意:一定要使表TB_error_rollback在你的库中不允许存在):
CREATE
TRIGGER
`material_update`
BEFORE
UPDATE
ON
`sf_material`
FOR
EACH
ROW
BEGIN
IF
new.auditing
=
'Y'
THEN
SET
@amountmm
=
(SELECT
amount-
new.amount
FROM
warehouse
WHERE
CODE=new.code
AND
whcode
=
new.whcode);
IF
@amountmm
update
TB_error_rollback
set
name=1;
END
IF;
UPDATE
warehouse
SET
amount
=@amountmm
WHERE
CODE=new.code
AND
whcode
=
new.whcode;
END
IF;
END;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-15
有时候在修改某一个字段的值得时候我们需要根据当前字段的不同状态进行不同处理,
比如对于用户表,我们需要记录下来用户被访问的次数,但访问次数的初始值为
null。
如下:
CREATE
TABLE
`test`
(
`id`
int(11)
NULL
DEFAULT
NULL
,
`name`
varchar(255)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`visit_num`
int(11)
NULL
DEFAULT
NULL
)
我们就可以使用如下的
sql
进行判断和修改
UPDATE
test
set
visit_age=if(visit_num
is
null,1,visit_num+1)
where
id=1。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网