建筑工程网站源码,wordpress 多域名 图片不显示,首次登陆建设银行网站图文解说,网站联系我们页面设计概念
视图是一张虚拟的表#xff0c;它是基于一个或多个基本表或其他视图的查询结果集。
视图本身不存储数据#xff0c;而是通过执行查询来动态生成数据#xff0c;用户可以像操作普通表一样使用视图来进行查询更新与管理等操作。
视图本身也不占用物理存储空间#xf…概念
视图是一张虚拟的表它是基于一个或多个基本表或其他视图的查询结果集。
视图本身不存储数据而是通过执行查询来动态生成数据用户可以像操作普通表一样使用视图来进行查询更新与管理等操作。
视图本身也不占用物理存储空间它仅仅是一个查询的逻辑表示物理上它依赖于基础表中的数据。
视图的创建与使用
语法create view view_name [(column_list)] as select_statement;
当我们有一个复杂的 sql 查询时如果每次都有这个需求那么每次就要写相同的 sql 语句例如现在有四张表如下所示学生表成绩表班级表和课程表 现在有一个需求查询学生的 id 姓名对应的班级 课程名字以及对应的成绩我们自然而然会写出下面的sql 语句
select st.student_id as id, st.name as 姓名, cl.name as 班级, c.name as 课程, sc.score as 成绩
from student st, class cl, course c, score sc
where st.class_id cl.class_id and sc.student_id st.student_id and sc.course_id c.course_id
order by st.student_id asc;当我们每次都想获得这张表的时候都需要写这么长的 sql 语句为了以后能便捷地获得这张表我们可以使用视图通过视图来保存这次 sql 查询的结果集。
create view v_student_course_score as (
select st.student_id as id, st.name as 姓名, cl.name as 班级, c.name as 课程, sc.score as 成绩
from student st, class cl, course c, score sc
where st.class_id cl.class_id and sc.student_id st.student_id and sc.course_id c.course_id
order by st.student_id asc
);通过视图的创建我们来查看表的数量发现视图已经在数据库中
当我们还有上面的 sql 查询需求的时候我们直接查询视图就可以得到结果集了。
select * from v_student_course_score; 注意 如果视图的创建的时候如果select_statement 没有使用别名并且发现有些名字是有重复的话就会创建失败 这三个的列名都是 name视图无法区分并且报下面的警告 警告的意思是有重复的 name 所以在创建视图的时候要避免列名的重复解决方法有两种一种是在 select_statement 中就定义好别名另一种就是在创建视图的时候在视图中定义别名第一种方法在上面已经演示过现在来演示第二种方法
create view v_student_course_score2 (
id, 姓名, 班级,课程, 分数
)
as (
select st.student_id, st.name, cl.name, c.name, sc.score
from student st, class cl, course c, score sc
where st.class_id cl.class_id and sc.student_id st.student_id and sc.course_id c.course_id
order by st.student_id asc
);注意取中文列名的时候不用加单引号 我们可以通过show create view view_name; 来查看视图的创建信息包括视图名视图创建语句视图使用的字符编码集和排列规则
视图的更新
一句话在视图能更新的情况下视图的更新会影响到基本表基本表的更新也会影响到视图二者是相互影响的关系。
下面是学生表我们将学生表的黑旋风李逵改名为李逵
现在我们来看一下视图会发现视图的黑旋风李逵也被修改为李逵 当我们修改视图将李逵的id 修改为50 我们会发现无法对视图进行修改说明不是所有的视图都能进行修改上面的信息说视图使用了 order by 子句无法进行更新操作在后面我会做个不能进行更新操作的视图的总结。
既然如此我们新建立一个视图
然后将李逵修改回黑旋风李逵。
看一下视图内容发现修改成功
最后看一下学生表也是成功被修改了 现在来总结什么样的视图不能被修改
创建视图使用了聚合函数使用了 distinct使用了order by 以及 having使用了合并查询union 或者 union all使用了子查询在创建视图的 from 子句中引用了不可更新的视图
视图的删除
语法drop view view_name;
演示视图 v_student_course_score 被删除成功。 小结
视图具有如下的优点
简单性视图可以将复杂的查询封装成一个简单的查询。例如针对一个复杂的多表连接查询可以创建一个视图用户只需查询视图而无需了解底层的复杂逻辑。安全性通过视图可以隐藏表中的敏感数据。例如⼀个系统的用户表中可以创建一个不包含密码列视图普通用户只能访问这个视图而不能访问原始表。逻辑数据独立性视图提供了⼀种逻辑数据独立性即使底层表结构发生变化只需修改视图定义而无需修改依赖视图的应用程序。使用到应用程序与数据库的解耦重命名列视图允许用户重命名列名以增强数据可读性