背景介绍
什么是视图
它是一个或几个基本表导出的表,与基本表不同,是一个虚表。数据库只存放视图的定义,而不放对应的数据,视图只是一种逻辑对象,并不是物理对象
数据任然在原来的基本表中,视图就像一个窗口,就像数学里的三视图,左视图,右视图,俯视图
视图提供了存储预定义的查询语句作为数据库中的对象以备以后使用的能力
知识剖析
视图的优点
掩码数据库的复杂性,视图把数据库设计的复杂性与用户屏蔽分开;
简化用户权限的管理
常见问题
视图的限制
性能:
SQL Server必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,SQL Server也把它变成一个复杂的结合体,需要花费一定的时间。
修改限制:
当用户试图修改视图的某些行时,SQL Server必须把它转化为对基本表的某些行的修改。对于简单视图来说,这是很方便的,但是,对于比较复杂的视图,可能是不可修改的。
不能在视图上创建索引。当使用合并算法的视图查询数据时,MySQL会使用底层表的索引。
如果删除或重命名视图所基于的表,则MySQL不会发出任何错误。但是,MySQL会使视图无效。
一个简单的视图可以更新表中数据。基于具有连接,子查询等的复杂SELECT语句创建的视图无法更新。
配置展示
创建一个显示id , user,pass 根据student表的profession = "JAVA";
CREATE VIEW stu (id , user,pass)
AS
SELECT id,user,pass
FROM student
WHERE profession = "JAVA";
连表建立试图
CREATE VIEW stu_act (id,user,pass,activities)
AS
SELECT DISTINCT id,student.user,pass,activities
FROM student, student_activities
WHERE profession = "JAVA" AND activities = "邀请人" ;
在第一个视图上建视图
CREATE VIEW stu_view (id,pass)
AS
SELECT DISTINCT id,pass
FROM stu
扩展思考
视图删除问题
DROP VIEW stu 只会删除当前的这个视图,在这个上面建立的视图则不会删除;
DROP VIEW stu CASCADE会删除当前的这个视图,和在此之上建立的视图
参考文献
http://blog.csdn.net/yujin753/article/details/43197941
易百教程
https://www.cnblogs.com/binyao/p/4899970.html
更多讨论
视图和表的区别
区别:
1、视图是已经编译好的sql语句。而表不是
2、视图没有实际的物理记录。而表有。
3、表是内容,视图是窗口
4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改
5、表是内模式,视图是外模式
6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
8、视图的建立和删除只影响视图本身,不影响对应的基本表。
分享到此结束
欢迎大家讨论
PPT:PPT
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~