MySQL如何创建视图
基本语法
可以使用CREATEVIEW语句来创建视图。
语法格式如下:
CREATEVIEW<视图名>AS
语法说明如下。
- <视图名>:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。
对于创建视图中的SELECT语句的指定存在以下限制:
- 用户除了拥有CREATEVIEW权限外,还具有操作中涉及的基础表和其他视图的相关权限。
- SELECT语句不能引用系统或用户变量。
- SELECT语句不能包含FROM子句中的子查询。
- SELECT语句不能引用预处理语句参数。
视图定义中引用的表或视图必须存在。但是,创建完视图后,可以删除定义引用的表或视图。可使用CHECKTABLE语句检查视图定义是否存在这类问题。
视图定义中允许使用ORDERBY语句,但是若从特定视图进行选择,而该视图使用了自己的ORDERBY语句,则视图定义中的ORDERBY将被忽略。
视图定义中不能引用TEMPORARY表(临时表),不能创建TEMPORARY视图。
WITHCHECKOPTION的意思是,修改视图时,检查插入的数据是否符合WHERE设置的条件。
创建基于单表的视图
MySQL可以在单个数据表上创建视图。
查看test_db数据库中的tb_students_info表的数据,如下所示。
mysql>SELECT*FROMtb_students_info; +----+--------+---------+------+------+--------+------------+ |id|name|dept_id|age|sex|height|login_date| +----+--------+---------+------+------+--------+------------+ |1|Dany|1|25|F|160|2015-09-10| |2|Green|3|23|F|158|2016-10-22| |3|Henry|2|23|M|185|2015-05-31| |4|Jane|1|22|F|162|2016-12-20| |5|Jim|1|24|M|175|2016-01-15| |6|John|2|21|M|172|2015-11-11| |7|Lily|6|22|F|165|2016-02-26| |8|Susan|4|23|F|170|2015-10-01| |9|Thomas|3|22|M|178|2016-06-07| |10|Tom|4|23|M|165|2016-08-05| +----+--------+---------+------+------+--------+------------+ 10rowsinset(0.00sec)
【实例1】
在tb_students_info表上创建一个名为view_students_info的视图,输入的SQL语句和执行结果如下所示。
mysql>CREATEVIEWview_students_info ->ASSELECT*FROMtb_students_info; QueryOK,0rowsaffected(0.00sec) mysql>SELECT*FROMview_students_info; +----+--------+---------+------+------+--------+------------+ |id|name|dept_id|age|sex|height|login_date| +----+--------+---------+------+------+--------+------------+ |1|Dany|1|25|F|160|2015-09-10| |2|Green|3|23|F|158|2016-10-22| |3|Henry|2|23|M|185|2015-05-31| |4|Jane|1|22|F|162|2016-12-20| |5|Jim|1|24|M|175|2016-01-15| |6|John|2|21|M|172|2015-11-11| |7|Lily|6|22|F|165|2016-02-26| |8|Susan|4|23|F|170|2015-10-01| |9|Thomas|3|22|M|178|2016-06-07| |10|Tom|4|23|M|165|2016-08-05| +----+--------+---------+------+------+--------+------------+ 10rowsinset(0.04sec)
默认情况下,创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图。
【实例2】
在tb_students_info表上创建一个名为v_students_info的视图,输入的SQL语句和执行结果如下所示。
mysql>CREATEVIEWv_students_info ->(s_id,s_name,d_id,s_age,s_sex,s_height,s_date) ->ASSELECTid,name,dept_id,age,sex,height,login_date ->FROMtb_students_info; QueryOK,0rowsaffected(0.06sec) mysql>SELECT*FROMv_students_info; +------+--------+------+-------+-------+----------+------------+ |s_id|s_name|d_id|s_age|s_sex|s_height|s_date| +------+--------+------+-------+-------+----------+------------+ |1|Dany|1|24|F|160|2015-09-10| |2|Green|3|23|F|158|2016-10-22| |3|Henry|2|23|M|185|2015-05-31| |4|Jane|1|22|F|162|2016-12-20| |5|Jim|1|24|M|175|2016-01-15| |6|John|2|21|M|172|2015-11-11| |7|Lily|6|22|F|165|2016-02-26| |8|Susan|4|23|F|170|2015-10-01| |9|Thomas|3|22|M|178|2016-06-07| |10|Tom|4|23|M|165|2016-08-05| +------+--------+------+-------+-------+----------+------------+ 10rowsinset(0.01sec)
可以看到,view_students_info和v_students_info两个视图中的字段名称不同,但是数据却相同。因此,在使用视图时,可能用户不需要了解基本表的结构,更接触不到实际表中的数据,从而保证了数据库的安全。
创建基于多表的视图
MySQL中也可以在两个以上的表中创建视图,使用CREATEVIEW语句创建。
【实例3】
在表tb_student_info和表tb_departments上创建视图v_students_info,输入的SQL语句和执行结果如下所示。
mysql>CREATEVIEWv_students_info ->(s_id,s_name,d_id,s_age,s_sex,s_height,s_date) ->ASSELECTid,name,dept_id,age,sex,height,login_date ->FROMtb_students_info; QueryOK,0rowsaffected(0.06sec) mysql>SELECT*FROMv_students_info; +------+--------+------+-------+-------+----------+------------+ |s_id|s_name|d_id|s_age|s_sex|s_height|s_date| +------+--------+------+-------+-------+----------+------------+ |1|Dany|1|24|F|160|2015-09-10| |2|Green|3|23|F|158|2016-10-22| |3|Henry|2|23|M|185|2015-05-31| |4|Jane|1|22|F|162|2016-12-20| |5|Jim|1|24|M|175|2016-01-15| |6|John|2|21|M|172|2015-11-11| |7|Lily|6|22|F|165|2016-02-26| |8|Susan|4|23|F|170|2015-10-01| |9|Thomas|3|22|M|178|2016-06-07| |10|Tom|4|23|M|165|2016-08-05| +------+--------+------+-------+-------+----------+------------+ 10rowsinset(0.01sec)
通过这个视图可以很好地保护基本表中的数据。视图中包含s_id、s_name和dept_name,s_id字段对应tb_students_info表中的id字段,s_name字段对应tb_students_info表中的name字段,dept_name字段对应tb_departments表中的dept_name字段。
查询视图
视图一经定义之后,就可以如同查询数据表一样,使用SELECT语句查询视图中的数据,语法和查询基础表的数据一样。
视图用于查询主要应用在以下几个方面:
- 使用视图重新格式化检索出的数据。
- 使用视图简化复杂的表连接。
- 使用视图过滤数据。
DESCRIBE可以用来查看视图,语法如下:
DESCRIBE视图名;
【实例4】
通过DESCRIBE语句查看视图v_students_info的定义,输入的SQL语句和执行结果如下所示。
mysql>DESCRIBEv_students_info; +----------+---------------+------+-----+------------+-------+ |Field|Type|Null|Key|Default|Extra| +----------+---------------+------+-----+------------+-------+ |s_id|int(11)|NO||0|| |s_name|varchar(45)|YES||NULL|| |d_id|int(11)|YES||NULL|| |s_age|int(11)|YES||NULL|| |s_sex|enum('M','F')|YES||NULL|| |s_height|int(11)|YES||NULL|| |s_date|date|YES||2016-10-22|| +----------+---------------+------+-----+------------+-------+ 7rowsinset(0.04sec)
注意:DESCRIBE一般情况下可以简写成DESC,输入这个命令的执行结果和输入DESCRIBE是一样的。
以上就是MySQL如何创建视图的详细内容,更多关于MySQL创建视图的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。