MySQL视图的应用——MySQL 5.7数据库

视图的使用主要包括视图的检索,以及通过视图对基表进行插入、修改、删除操作。视图的检索几乎没有什么限制,但是对通过视图实现表的插入、修改、删除操作则有一定的限制条件。

1 .使用视图管理表数据

(1)使用视图进行查询。

使用视图进行查询实际上就是把视图作为数据源,实现查询功能。
例如:通过视图stu_view2,查询选修课程号为c08123、且成绩在80分以上的18级男生学生的学号、课程号和成绩。

mysql> select 学号, 姓名,课程号,成绩
	-> from stu_view2
	-> where 课程号='c08123' and 成绩 > 80;

在这里插入图片描述

(2)使用视图进行统计计算

创建视图course_avg,统计各门课程平均成绩,并按课程名称降序排列。

mysql> create  view  course_avg
	-> as select  cname  课程名,  avg(final)  平均成绩
	-> from  score join course  on  score.courseno= course.courseno
	-> group  by   cname  desc;
mysql> select * from course_avg;

在这里插入图片描述

(3)使用视图修改基本表数据。

使用视图修改表数据,是指在视图中进行insertupdatedelete等操作而修改基表的数据。通过视图修改表数据时,要有执行相关操作的权限。

如:通过视图teach_view1,对基表teacher进行插入、更新和删除数据的操作。
代码和运行结果如下:

mysql> insert into teach_view1(teacherno,tname,major,prof,department)
	-> values (‘t06027’ , ‘陶期年’ , ‘纳米技术’ , ‘教授’ , ‘材料学院’ );
mysql> update teach_view1  set  prof = ‘副教授’  where  teacherno = ‘t07019’;
mysql> delete  from  teach_view1  where  teacherno = ‘t08017’;

在这里插入图片描述
使用select语句查询teacher表,可以看到基表中的数据也相应地进行了修改。

mysql> select  *  from  teacher ;

在这里插入图片描述

视图stu_score1依赖于源表student、course和score等3张表,包括studentno、sname、 phone、cname和final等5个字段,通过stu_score1修改基本表student中的学号为18125121107的电话号码。

mysql> update stu_score1 set phone='132123456777'
    -> where studentno =18125121107;

在这里插入图片描述
通过查看student 表,可以看到相应成绩已做了更改。

mysql> select  studentno,sname, phone  from  student
    -> where  studentno  ='18125121107' ;

在这里插入图片描述

说明:
(1)视图若只依赖于一个基表,则可以直接通过更新视图来更新基本表的数据。
(2)若一个视图依赖于多张基表,则一次只能修改一个基表的数据,不能同时修改多个基本表的数据。
(3)如果视图包含下述结构中的任何一种,都是不可修改的:
①视图的列含有聚合函数(avg、count、sum、min、max)。
②视图的列是通过表达式并使用列计算出其他列。
③含有distinct关键字。
④含有group by子句、order by子句、having子句。
⑤含有union运算符。
⑥视图的列位于选择列表中的子查询。
⑦from子句中包含多个表。
⑧select语句中引用了不可更新视图。
⑨where子句中的子查询,引用from子句中的表。

2.检查视图的应用。

在MySQL数据库中,视图可分为普通视图与检查视图。前面介绍的视图都没有使用with check option子句,当没有with_check_option时,表示with_check_option的值为0。即为普通视图,普通视图不具备检查功能。

如果使用了with check option子句,在通过检查视图更新基表数据时,只有满足检查条件的更新语句才能成功执行。

例子:编程在teaching数据库中创建一个名称为V_ dept的视图,包含所有部门为“计算机学院”的老师的数据信息,需限制插入数据中部门必须为“计算机学院”。
分析:该程序通过单表生成的视图V_dept向基表teacher中插入一条记录,并通过查询语句显示基表中的所有数据。

在“查询编辑器”中输入以下程序,创建V_dept视图。

mysql> create view V_dept
	-> AS
	-> select teacherno,tname,major,prof, department
	-> from teacher
	-> where department ='计算机学院'
	-> with check option;

在这里插入图片描述
通过视图V_ dept 向基表teacher中插入数据。

mysql> insert into V_dept
	-> values(‘t08017’,‘时观’,‘金融管理’,‘副教授’,‘计算机学院’);

在这里插入图片描述

mysql> select * from teacher where tname='时观';

在这里插入图片描述
本例由于创建了with check option 检查条件约束,当插入记录时所有“部门”信息不符合条件的记录无法插入和修改,并显示错误提示信息。

通过视图V_sex向基表teacher中插入数据行(‘t08037’,‘时刻’,‘软件技术’,‘讲师’,‘软件学院’)。

mysql> insert into V_dept
    -> values('t08037','时刻','软件技术','讲师','软件学院');

在这里插入图片描述
执行结果表明,通过检查更新表数据时,检查视图对更新数据进行了先行检查,若更新语句的数据不满足检查条件,则检查视图就会抛出异常,更新失败。

发布了38 篇原创文章 · 获赞 15 · 访问量 1690

猜你喜欢

转载自blog.csdn.net/hyh17808770899/article/details/105444527
今日推荐