我已经看到提到的MySQL触发器,我很好奇它们是否可以用于我的场景。那就是:
假设我有一张表results_tb
。目前有一个字段score
和一个字段grade
。因此,我可以使用触发器更新分数变化等级吗?
所以例如,假设得分存储为40,等级更新为C,然后如果得分更新为70,则等级再次更新为A.
这可能是触发器吗?
答案 0 :(得分:1)
好吧,你可以创建一个{更新'触发的trigger
。 manual很清楚。但是你必须制作一些与你的分数相对应的等级的“列表”。所以你有一个列表可以将分数与成绩进行比较。这对我来说听起来像是一个“查询表”。
你难道不能只为你的数据库添加一个属于某个分数的成绩表吗?如果你查询当前的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 ;