存储过程中是否存在此触发器的等效项

时间:2012-11-12 11:45:16

标签: mysql

我一直在专用服务器上使用这个MySQL触发器,因此每次更新表时,它都会计算新的总和并更新另一个表:

delimiter |
CREATE TRIGGER after_insert_rep_points AFTER INSERT ON users_reputation
FOR EACH ROW
BEGIN
DECLARE new_total INT(10);
SELECT SUM(rep_points) INTO new_total FROM users_reputation
WHERE user_id = NEW.user_id;
UPDATE users SET rep_total = new_total WHERE user_id = NEW.user_id;
END
|
delimiter ;

我现在需要在共享托管环境中使用它,但不幸的是,由于安全预防措施,我不能在共享环境中拥有SUPER USER权限,这是触发器所必需的。我不明白这一点。我想每个人都应该能够使用触发器。

我不是那些在存储过程上的线索,事实上我没用,但是我想知道这个查询是否可以使用一个执行,如果有的话,任何人都可以给我任何指针吗?

1 个答案:

答案 0 :(得分:0)

编写触发器的人显然具有非常有限的SQL技能 - 整个身体可以表示为一个简单的查询:

UPDATE users SET
rep_total = (SELECT SUM(rep_points) 
    FROM users_reputation 
    WHERE user_id = users.user_id)
WHERE user_id = ?; -- "?" is NEW.user_id inside the trigger. You must provide it

您不需要存储过程 - 只需运行此查询。