mysql写触发事件对s表中grade属性修改若分数增加百分之十则将此次操作记录到c表中,old是修改前的分数,new是修改后的分数下面规则
时间: 2023-11-22 11:55:13 浏览: 54
可以使用以下SQL语句来创建一个触发器,实现你的需求:
```sql
CREATE TRIGGER trg_grade_update AFTER UPDATE ON s
FOR EACH ROW
BEGIN
DECLARE diff FLOAT;
DECLARE threshold FLOAT;
SET threshold = 0.1;
SET diff = (NEW.grade - OLD.grade) / OLD.grade;
IF diff > threshold THEN
INSERT INTO c (id, stu_id, old_grade, new_grade, operation_time)
VALUES (NULL, NEW.id, OLD.grade, NEW.grade, NOW());
END IF;
END;
```
解释一下这个触发器的实现思路:
- 使用 `AFTER UPDATE ON s` 来指定在 `s` 表上更新之后执行该触发器;
- `FOR EACH ROW` 表示对每一行进行操作;
- 使用 `DECLARE` 语句声明两个变量 `diff` 和 `threshold`,分别表示分数变化的百分比和触发器的阈值;
- 设置 `threshold` 为 `0.1`,即分数增加 `10%` 时触发器才会记录此次操作;
- 计算 `diff`,即新分数相对于旧分数的变化百分比;
- 如果 `diff` 大于 `threshold`,则说明分数增加了 `10%` 或以上,需要将本次操作记录到 `c` 表中;
- 使用 `INSERT INTO` 语句将操作记录插入到 `c` 表中,包括学生编号、修改前的分数、修改后的分数以及操作时间。
以上是一个简单的实现,你可以根据自己的实际需求进行修改和优化。
阅读全文