mysql视图,mysql视图的作用
视图是虚拟表,是从数据库中一个或多个表中导出来的表。视图还可以从已经存在的视图的基础上定义。数据库中只存放视图的定义,没有视图中的数据,这些数据都存放在原来的表中。视图不支持输入记录的功能
创建视图格式:
create [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
VIEW 视图名 [(属性清单)]
AS SELECT 语句
[WITH [CASCADED|LOCAL] CHECK OPTION];
注:ALGORITHM是可选参数表示视图选择的算法,属性清单是可选参数指定了视图中各个属性的名词,默认情况下与select语句中查询的属性相同;WITH CHECK OPTION是可选参数表示更新视图时要保证在该视图的权限范围内。
ALGORITHM中undefined选项表示mysql将自动选择所要使用的算法;merge选项表示将使用视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分;temptable选项表示将视图的结果存入临时表,然后用临时表执行语句。
CASCADED表示更新视图时要满足所有相关视图和表的条件,该参数为默认值;local表示更新视图时,要满足该视图本身的定义的条件即可。
未指定属性清单的情况下视图的属性名与select语句查询的属性名相同。
注一:创建视图时最好加上WITH CHECK OPTION参数而且最好加上CASCADED参数。这样,从视图上派生出来的新视图后,更新新视图需要考虑其父视图的约束条件。这张方式比较严格可以保证数据安全性。
注二:创建视图要有create view的权限,同时要有select权限。在mysql数据库下面的user表中保存这些权限信息,可以使用select语句查询。
select Select_priv,Create_view_priv from mysql.user where user='用户名';
一、查看视图:describe语句或show create view语句 或show table status语句或information_ schema数据库下的views表
二、修改视图
1、create or replace 语句来修改视图
create or replace [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
VIEW 视图名 [(属性清单)]
AS SELECT 语句
[WITH [CASCADED|LOCAL] CHECK OPTION];
注:create or replace语句不仅可以修改已经存在的视图还可以创建新的视图。
2、alter语句修改视图
alter [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
VIEW 视图名 [(属性清单)]
AS SELECT 语句
[WITH [CASCADED|LOCAL] CHECK OPTION];
注:alter只能修改已经存在的视图。
三、更新视图
更新视图指通过视图来insert、update、delete表中的数据。视图更新都会转换到基本表来更新。更新视图只能更新权限范围内的数据,超出范围就不能更新了。
例:update 视图名 set name='a';更新后基本表内容也被更新
有以下情况不能更新视图:1、包含sum()、count()、max()、min()等函数2、union、union all、distinct、group by、having等关键字。3、常量视图4、视图中的select中包含子查询5、由不可更新的视图导出的视图6、创建视图时,ALGORITHM为TEMPTABLE类型,该类型是系统临时表是不能更新的。7、视图对应的表上存在没有默认值的列,而且该列没有包含在视图里。因为,在更新视图时,这个没有默认值的记录将没有值插入,也没有null值插入。数据库系统是不会允许这样的情况出现的,会阻止视图更新。8、WITH [CASCADED|LOCAL] CHECK OPTION也将决定视图能否更新。local参数表示更新视图时满足该视图本身的定义条件即可;CASCADED参数表示更新视图时要满足所有相关视图和表的条件。没有指明时默认为CASCADED。
四、删除视图
注:删除视图不会影响基本表中的数据
格式:drop view [if exists] 视图名列表 [restrict|cascade]; if exists参数指判断视图存在,如果存在则执行不存在则不执行,“视图名列表”参数表示要删除的视图的名称列表,各视图名用逗号隔开。
一、查询是否存在drop权限
select drop_priv from mysql.user where user='用户名';
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。