MySQL-3更新需要在过程中逐个运行
我必须在一个过程中运行3个更新。当我在php中一对一地调用它们时,我的3个单独的更新工作得很好,但我希望它们重新组合,只执行一个调用。我的程序是MySQL-3更新需要在过程中逐个运行,mysql,stored-procedures,Mysql,Stored Procedures,我必须在一个过程中运行3个更新。当我在php中一对一地调用它们时,我的3个单独的更新工作得很好,但我希望它们重新组合,只执行一个调用。我的程序是 create definer = root@localhost procedure UpdateScorePredictionParticipant(IN predPts int(10), IN predId int(10), IN partId int(10)) BEGIN UPDATE predictions SET pred_pt
create
definer = root@localhost procedure UpdateScorePredictionParticipant(IN predPts int(10), IN predId int(10), IN partId int(10))
BEGIN
UPDATE predictions
SET pred_pts = @predPts
WHERE pred_game_id = @predId and participant_id = @partId;
UPDATE ranking
SET pts_wildcard = (SELECT sum(pred_pts)
FROM predictions
INNER JOIN games g on predictions.pred_game_id = g.id
WHERE predictions.participant_id = @partId)
WHERE participant_id = @partId;
UPDATE ranking
SET total = (pts_wildcard+pts_conference+pts_division+pts_pred_sb+pts_sb)
WHERE participant_id = @partId;
END;
我如何在同一个通话中逐个执行这3个更新
谢谢,当您更新3个不同的表时,您将需要执行三个单独的更新。但是,如果将它们放在一个过程中,则只需要从PHP代码中调用该过程 要修复过程代码,请从使用的参数名称中删除
@
为参数添加前缀也是一种很好的做法,这样它们就不会与列名混淆
您可以做的最后一件事是在过程中使用事务,这样所有更新都将完成,或者如果其中一些更新失败,则所有更新都无法完成。这确保了操作中的原子性
create procedure UpdateScorePredictionParticipant(
in_predPts int,
in_predId int,
in_partId int
)
BEGIN
START TRANSACTION;
UPDATE predictions
SET pred_pts = in_predPts
WHERE pred_game_id = in_predId and participant_id = in_partId;
UPDATE ranking
SET pts_wildcard = (
SELECT sum(pred_pts)
FROM predictions
INNER JOIN games g on predictions.pred_game_id = g.id
WHERE predictions.participant_id = in_partId
)
WHERE participant_id = in_partId;
UPDATE ranking
SET total = (pts_wildcard+pts_conference+pts_division+pts_pred_sb+pts_sb)
WHERE participant_id = in_partId;
COMMIT;
END
对不起,我不明白你的问题!您当前存储的进程有什么问题?你一个接一个地执行这些语句是什么意思?出于某种原因,我的第二次和第三次更新没有完成。。。但我已经做了斯拉克索的建议和它的工作。谢谢