如:需要根据不同的游戏ID去增加 TGameData_ID 表中玩家对应的金币数。
如:需要根据不同的游戏ID去 TGameData_ID 表中查询玩家对应的金币数,数量足够减去,数量不够不减。
鉴于动态处理语句目前不能在MySQL的触发器或者存储函数中使用, 但是可以在存储过程里面使用。那么我们可以用通用的方法,但是可能要修改应用的部分SQL代码,不过改动量很小。假如我们要使用表TB, 然后依次关联TB1,TB2,… , TBN进行删除。我们可以把做处理的动态语句写到存储过程里面,然后在对表TB进行写 *** 作(INSERT,UPDATE,DELETE)时, 加上对存储过程的调用即可。
我们来举个例子:
Delete from tb where id = 2本来只有这条语句,可我们修改为:
Delete from tb where id = 2call sp_delete_case()
@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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)