视图(知识点)
MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。
数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据都存放在定义视图查询所引用的真实表中。使用视图查询数据时,数据库会从真实表中取出对应的数据。因此,视图中的数据是依赖于真实表中的数据的。一旦真实表中的数据发生改变,显示在视图中的数据也会发生改变。
视图可以从原有的表上选取对用户有用的信息,那些对用户没用,或者用户没有权限了解的信息,都可以直接屏蔽掉,作用类似于筛选。这样做既使应用简单化,也保证了系统的安全。
视图(应用案例)
现有来自河北和山东的三个理科学生报考北京大学(Peking University)和清华大学的(Tsinghua University),现在需要对其考试的结果进行查询和管理,清华大学的录取分数为725,北京大学的录取分数为720。需要创建三个表对学生的信息进行管理,这三个表分别是学生表、报名表和成绩表,其中这三个表的主键(s_id)是统一的。
- 进入mysql服务器中,首先执行“drop database if exists five”语句,以此确保打开的mysql中没有数据库five。
- 创建名为five的数据库,并选择使用five数据库,以下的所有表均创建在five数据库内。
- 练习题:按以下要求创建数据表stu。
- 字段s_id:设置数据类型int(11),主键约束;
- 字段s_name:设置数据类型varchar(20),非空约束。
- 字段addr:设置数据类型varchar(50),非空约束。
- 字段tel:设置数据类型varchar(50),非空约束。
请将建表过程代码截图提交:
- 练习题:向stu数据表添加如下数据:
- 练习题:按以下要求创建数据表sign
- 字段s_id:设置数据类型int(11),主键约束;
- 字段s_name:设置数据类型varchar(20),非空约束。
- 字段s_sch:设置数据类型varchar(50),非空约束。
- 字段s_sign_sch:设置数据类型varchar(50),非空约束。
请将建表过程代码截图提交:
- 练习题:向sign数据表添加如下数据:
7、练习题:按以下要求创建数据表stu_mark。
- 字段s_id:设置数据类型int(11),主键约束;
- 字段s_name:设置数据类型varchar(20),非空约束。
- 字段mark:设置数据类型int(11),非空约束。
请将建表过程代码截图提交:
8、练习题:向stu_mark数据表添加如下数据:
9、创建考上北京大学(Peking University)(录取分数720)的学生视图。
视图的名称为“view_beida”,视图的内容包含考上北大的学生学号、姓名、成绩和报考学校名称4个字段。
解题思路:
- 创建该视图使用的基本表是sign(报名表)和stu_mark(成绩表);
- 考上北大需要满足的条件:
(2.1)报考了北大:sign.s_sign_sch='peking university'
(2.2)分数达到720:stu_mark.mark>=720
(2.3)sign.s_id=stu_mark.s_id(用于连接sign和stu_mark)
请将创建视图语句和查询视图结果截图提交:
10、创建考上清华大学(Tsinghua University)(录取分数725)的学生视图。
视图的名称为“view_qinghua”,视图的内容包含考上清华的学生学号、姓名、成绩和报考学校名称4个字段(解题思路和上题一样)。
请将创建视图语句和查询视图结果截图提交:
11、更新视图view_qinghua
(1)Huangyun成绩录入错误,多录了10分,接下来对Huangyun的成绩进行修改,减去多录的10分。
提示:使用update语句对stu_mark基本表进行更新,减去多录的10分。更新语句格式为:update 表名称 set 列名称 = 新值 where 列名称 = 原来值;
将update更新语句截图提交:
(2)使用select语句查看view_qinghua视图
将查询结果截图提交: