假设我正在创建一个'学生'数据库,并且其中有一个名为'考试'的表格。现在我有以下两列 - “标记”和“等级”,我希望“等级”列根据“标记”中输入的值自动接收值。说'A'代表'标记'> = 90,'B'代表'标记'> = 80等等。 有没有办法做到这一点?
答案 0 :(得分:4)
不是很容易。在MySQL中,您可以进行更新:
update students
set grade = (case when marks >= 90 then 'A'
when marks >= 80 then 'B'
. . .
end);
但是,对于下一个insert
或update
声明,这将过时。
在MySQL 5.7.6中,您可以自动生成列:
alter table students
add grade char(1) as (case when marks >= 90 then 'A'
when marks >= 80 then 'B'
. . .
end);
这很方便,因为该列是在查询时计算的,因此它是自动更新的。
在早期版本中,您可以使用视图执行类似操作:
create view v_students as
select s.*,
(case when marks >= 90 then 'A'
when marks >= 80 then 'B'
. . .
end) as grade
from students;
这几乎与生成的列一样好,但它要求每个人都查询视图。
最后,您可以实际存储该值,使用触发器在marks
更改时进行维护。