有关使用MySQL触发器的问题

时间:2011-05-15 18:20:46

标签: mysql sql triggers

我已经看到提到的MySQL触发器,我很好奇它们是否可以用于我的场景。那就是:

假设我有一张表results_tb。目前有一个字段score和一个字段grade。因此,我可以使用触发器更新分数变化等级吗?

所以例如,假设得分存储为40,等级更新为C,然后如果得分更新为70,则等级再次更新为A.

这可能是触发器吗?

2 个答案:

答案 0 :(得分:1)

好吧,你可以创建一个{更新'触发的triggermanual很清楚。但是你必须制作一些与你的分数相对应的等级的“列表”。所以你有一个列表可以将分数与成绩进行比较。这对我来说听起来像是一个“查询表”。

你难道不能只为你的数据库添加一个属于某个分数的成绩表吗?如果你查询当前的results_tb,你可以在该表中添加join吗?

所以而不是

SELECT score, grade FROM results_tb WHERE id=1

你会得到

SELECT r.score, l.grade FROM results_tb r 
JOIN lookup l ON r.score = l.score
WHERE r.id=1

答案 1 :(得分:1)

如果您愿意,可以使用触发器,但是,我同意Nanne在所描述的情况下看起来更好的方法。

DELIMITER |

DROP TRIGGER /*!50032 IF EXISTS */ `trigger_update_results_tb`|

CREATE TRIGGER `trigger_update_results_tb` BEFORE UPDATE ON `results_tb` 
    FOR EACH ROW BEGIN
       CASE FLOOR(NEW.score / 10)
        WHEN 0 THEN SET NEW.grade = 'F';
        WHEN 1 THEN SET NEW.grade = 'F';
        WHEN 2 THEN SET NEW.grade = 'F';
        WHEN 3 THEN SET NEW.grade = 'F';
        WHEN 4 THEN SET NEW.grade = 'D';
        WHEN 5 THEN SET NEW.grade = 'C';
        WHEN 6 THEN SET NEW.grade = 'B';
        ELSE SET NEW.grade = 'A';
       END CASE;
    END;
|

DELIMITER ;