mysql 触发器 if 语句 update

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
参考技术A 有时候在修改某一个字段的值得时候我们需要根据当前字段的不同状态进行不同处理,
比如对于用户表,我们需要记录下来用户被访问的次数,但访问次数的初始值为
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。

以上是关于mysql 触发器 if 语句 update的主要内容,如果未能解决你的问题,请参考以下文章

在mysql if语句中使用另一个表中的列

MySql触发器语句

MySQL ------ 触发器(TRIGGER)(二十七)

触发器

MySQL——简单触发器的了解

如何在mysql触发器中声明If语句