基本语法
可以使用 create view 语句来创建视图。
语法格式如下:
create view <视图名> as <select语句>
语法说明如下。
对于创建视图中的 select 语句的指定存在以下限制:
视图定义中引用的表或视图必须存在。但是,创建完视图后,可以删除定义引用的表或视图。可使用 check table 语句检查视图定义是否存在这类问题。
视图定义中允许使用 order by 语句,但是若从特定视图进行选择,而该视图使用了自己的 order by 语句,则视图定义中的 order by 将被忽略。
视图定义中不能引用 temporary 表(临时表),不能创建 temporary 视图。
with check option 的意思是,修改视图时,检查插入的数据是否符合 where 设置的条件。
创建基于单表的视图
mysql 可以在单个数据表上创建视图。
查看 test_db 数据库中的 tb_students_info 表的数据,如下所示。
mysql> select * from tb_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 | +----+--------+---------+------+------+--------+------------+ 10 rows in set (0.00 sec)
【实例 1】
在 tb_students_info 表上创建一个名为 view_students_info 的视图,输入的 sql 语句和执行结果如下所示。
mysql> create view view_students_info -> as select * from tb_students_info; query ok, 0 rows affected (0.00 sec) mysql> select * from view_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 | +----+--------+---------+------+------+--------+------------+ 10 rows in set (0.04 sec)
默认情况下,创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图。
【实例 2】
在 tb_students_info 表上创建一个名为 v_students_info 的视图,输入的 sql 语句和执行结果如下所示。
mysql> create view v_students_info -> (s_id,s_name,d_id,s_age,s_sex,s_height,s_date) -> as select id,name,dept_id,age,sex,height,login_date -> from tb_students_info; query ok, 0 rows affected (0.06 sec) mysql> select * from v_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 | +------+--------+------+-------+-------+----------+------------+ 10 rows in set (0.01 sec)
可以看到,view_students_info 和 v_students_info 两个视图中的字段名称不同,但是数据却相同。因此,在使用视图时,可能用户不需要了解基本表的结构,更接触不到实际表中的数据,从而保证了数据库的安全。
创建基于多表的视图
mysql 中也可以在两个以上的表中创建视图,使用 create view 语句创建。
【实例 3】
在表 tb_student_info 和表 tb_departments 上创建视图 v_students_info,输入的 sql 语句和执行结果如下所示。
mysql> create view v_students_info -> (s_id,s_name,d_id,s_age,s_sex,s_height,s_date) -> as select id,name,dept_id,age,sex,height,login_date -> from tb_students_info; query ok, 0 rows affected (0.06 sec) mysql> select * from v_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 | +------+--------+------+-------+-------+----------+------------+ 10 rows in set (0.01 sec)
通过这个视图可以很好地保护基本表中的数据。视图中包含 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> describe v_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 | | +----------+---------------+------+-----+------------+-------+ 7 rows in set (0.04 sec)
注意:describe 一般情况下可以简写成 desc,输入这个命令的执行结果和输入 describe 是一样的。
以上就是mysql如何创建视图的详细内容,更多关于mysql创建视图的资料请关注移动技术网其它相关文章!
如对本文有疑问, 点击进行留言回复!!
网友评论