mysql视图学习笔记记录
mysql5.1才有视图功能,下面本文章来给各位介绍mysql视图,创建,删除,修改及创建视图的一些注意事项,希望文章对各位有所帮助。
创建视图,在MySQL中,创建视图的完整语法如下:
- CREATE[ORREPLACE][ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
- VIEWview_name[(column_list)]
- ASselect_statement
- [WITH[CASCADED|LOCAL]CHECKOPTION]
其对应的语法变量信息如下:
[OR REPLACE]:中括号中的OR REPLACE关键字是可选的。如果当前数据库中已经存在指定名称的视图时,没有该关键字,将会提示错误信息;如果使用了OR REPLACE关键字,则当前正在创建的视图会覆盖掉原来同名的视图。
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
ALGORITHM子句是可选的,它表示使用何种算法来处理视图。此外,它并不属于标准SQL的一部分,而是MySQL对标准SQL进行的功能扩展。ALGORITHM可以设置三个值:MERGE、TEMPTABLE或UNDEFINED。如果没有ALGORITHM子句,则默认值为UNDEFINED(未定义的)。
对于MERGE,会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。
对于TEMPTABLE,视图的结果将被置于临时表中,然后使用它执行语句。
对于UNDEFINED,MySQL将选择所要使用的算法。如果可能,它倾向于MERGE而不是TEMPTABLE,这是因为MERGE通常更有效,而且如果使用了临时表,视图是不可更新的。
之所以提供TEMPTABLE选项,是因为TEMPTABLE在创建临时表之后、并在完成语句处理之前,能够释放基表上的锁定。与MERGE算法相比,锁定释放的速度更快,这样,使用视图的其他客户端不会被屏蔽过长时间。
此外,MERGE算法要求视图中的行和基表中的行具有一对一的关系。如果视图包含聚合函数(SUM(), MIN(), MAX(), COUNT()等)、DISTINCT、GROUP BY、HAVING、UNION或UNION ALL、没有基表的引用文字值(例如:SELECT 'hello';)等结构中的任何一种,将失去一对一的关系,此时必须使用临时表取而代之。
[(column_list)]:(column_list)用于自定义视图中各个字段的名称。如果没有该命令选项,那么通过视图查询到的各个字段的名称和视图所使用到的数据表的字段名称保持一致。下面是一个常见的用于创建视图的SQL语句:
- CREATEORREPLACEVIEWv_user
- AS
- SELECTid,usernameFROMuser;
由于user表中的字段名称为id和username,因此视图v_user中的两个字段名称也分别默认为id和username。现在,我们将视图v_user中的字段名称分别自定义为uid和uname,代码如下:
- CREATEORREPLACEVIEWv_user(uid,uname)
- AS
- SELECTid,usernameFROMuser;
select_statement:select_statement用于指定视图的内容定义。简而言之,这里就是用户自定义的一个SELECT语句。
[WITH [CASCADED | LOCAL] CHECK OPTION]
该选项中的CASCADED为默认值,LOCAL CHECK OPTION用于在可更新视图中防止插入或更新行。由于此选项一般不使用,因此不再赘述,具体信息请参考MySQL官方网站上的相关信息。
1.使用举例
热门评论