一、视图修改
语法一、
视图的修改指的是修改了数据表的定义,当视图定义的数据表字段发生变化时需要对视图进行修改以保证查询的正确性。
语法:
CREATE OR REPLACE [ ALGORITHM= { UNDEFINED | MERGE | TEMPTABLE } ]
VIEW 视图名 [(属性清单)]
AS SELECT 语句
[ WITH [ CASCADED | LOCAL] CHECK OPTION ]
ALGORITHM :可选参数, 视图算法
UNDEFINED: mysql自动选择算法
MERGE:使用的视图语句与视图定义合并起来
TEMPTABLE: 结果存入临时表,然后用临时表执行语句。
属性清单:可选,指定视图中各个属性的名词,默认情况下和select语句中查询的属性相同。
WITH CHECK OPTION:表示视图在更新时保证在视图的权限范围内
CASCADED :默认值 更新视图时要满足所有相关视图和表的条件,才进行更新
LOCAL:表示更新视图时满足该视图本身定义的条件即可更新。
创建视图和修改视图语法区别:
多了 OP REPLACE 表示:视图已经存在则执行修改,不存在则创建视图。
(一)修改em_view视图
1.修改前查看一下
2.执行修改
语法二、
ALTER [ ALGORITHM= { UNDEFINED | MERGE | TEMPTABLE } ]
VIEW view_name [(column_list)]
AS SELECT statement
[ WITH [ CASCADED | LOCAL] CHECK OPTION ]
(二)修改e_view视图
1.第一种修改
2、第二种修改
总结:第二种方法只能修改已经存在的视图,所以一般使用第一种方法
二、更新视图
CREATE OR REPLACE 和ALTER是对视图结构进行修改,而还可以对视图进行内容修改的,也就是对视图进行update操作
当然对视图进行操作,实际上是 对数据表进行操作
执行
再看基表
删除:
注意:当视图包含如下情况时不能被更新,
1.包含以下关键字的sql语句:聚合函数(sum、min、max、count)、distinct、group by 、having、union或者uinon all
2.常量视图
3.select 中包含子查询
4.join
5.from一个不可更新的视图
6.where字句的子查询引用了from字句中的表
三、删除视图
语法
DROP VIEW [ IF EXISTS] view_name [, view_name1, view_name2...]
无法查看了
总结:
1.视图是数据库数据的特定子集。可以禁止所有用户访问数据库表,而要求用户只能通过视图操作数据,
这种方法可以保护用户和应用程序不受某些数据库修改的影响。
2.视图是抽象的,他在使用时,从表里提取出数据,形成虚的表。 不过对他的操作有很多的限制 。
3. 而且视图是永远不会自己消失的除非你删除它。
视图有时会对提高效率有帮助。临时表几乎是不会对性能有帮助,是资源消耗者。
视图一般随该数据库存放在一起,临时表永远都是在tempdb里的。
4.视图适合于多表连接浏览时使用!不适合增、删、改.,存储过程适合于使用较频繁的SQL语句,这样可以提高 执行效率!
视图和表的区别和联系
区别:1、视图是已经编译好的sql语句。而表不是
2、视图没有实际的物理记录。而表有。
3、表是内容,视图是窗口
4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改
5、表是内模式,视图是外模式
6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
8、视图的建立和删除只影响视图本身,不影响对应的基本表。