0

私はこの 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 権限を取得できません。私はこれを理解していません。誰もがトリガーを使用できるべきだと思います。

私はストアド プロシージャについてあまり詳しくありませんが、実際には役に立たないのですが、このクエリを使用して実行できるかどうか疑問に思っています。

4

1 に答える 1

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

ストアド プロシージャは必要ありません。このクエリを実行するだけです。

于 2012-11-12T11:51:28.247 に答える