#======================================

#平台:windows7        

#MYsql版本:mysql-5.5.62-winx64(安装版)

#MYsql工具:SQLyog - 64 bitNavicat Premium 12

工具包地址:https://pan.baidu.com/s/17SOAmwcgOw9hYtTzDb9-Tw

#======================================

 

 

Q什么是视图?视图是干什么用的?

 

A:视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。通过视图,可以展现基本表的部分数据;视图数据来自定义视图的查询中使用的表,使用视图动态生成。

 

Q为什么要使用视图?

 

A:因为视图的诸多优点,如下:

  1)简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。

 

  2)安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。

 

  3)数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

 

总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率。

 

Q:视图操作基本数据表时需要注意什么?

 

A1、对视图数据进行修改操作会直接影响基本表

2、当视图来自多个基本表时,不允许添加和删除数据。

 

一、创建视图

 

CREATE VIEW view_name 

    AS select_statement

......

TIPS:一般命名视图时,用view_XXX或者v_XXX的格式,便于区别其他表。

 

示例1、在单表上创建视图

 

mysql> create view v_F_players(编号,名字,性别,电话)

    -> as

    -> select PLAYERNO,NAME,SEX,PHONENO from PLAYERS

    -> where SEX='F'

    -> with check option;

Query OK, 0 rows affected (0.00 sec)

 

mysql> desc v_F_players;

+--------+----------+------+-----+---------+-------+

| Field  | Type     | Null | Key | Default | Extra |

+--------+----------+------+-----+---------+-------+

| 编号    | int(11)  | NO   |     | NULL    |       |

| 名字    | char(15) | NO   |     | NULL    |       |

| 性别    | char(1)  | NO   |     | NULL    |       |

| 电话    | char(13) | YES  |     | NULL    |       |

+--------+----------+------+-----+---------+-------+

4 rows in set (0.00 sec)

 

mysql> select * from  v_F_players;

+--------+-----------+--------+------------+

| 编号    | 名字      | 性别    | 电话        |

+--------+-----------+--------+------------+

|      8 | Newcastle | F      | 070-458458 |

|     27 | Collins   | F      | 079-234857 |

|     28 | Collins   | F      | 010-659599 |

|    104 | Moorman   | F      | 079-987571 |

|    112 | Bailey    | F      | 010-548745 |

+--------+-----------+--------+------------+

5 rows in set (0.02 sec)

 

 

示例2、在多表上创建视图

 

mysql> create view v_match

    -> as 

    -> select a.PLAYERNO,a.NAME,MATCHNO,WON,LOST,c.TEAMNO,c.DIVISION

    -> from 

    -> PLAYERS a,MATCHES b,TEAMS c

    -> where a.PLAYERNO=b.PLAYERNO and b.TEAMNO=c.TEAMNO;

Query OK, 0 rows affected (0.03 sec)

 

mysql> select * from v_match;

+----------+-----------+---------+-----+------+--------+----------+

| PLAYERNO | NAME      | MATCHNO | WON | LOST | TEAMNO | DIVISION |

+----------+-----------+---------+-----+------+--------+----------+

|        6 | Parmenter |       1 |   3 |    1 |      1 | first    |

|       44 | Baker     |       4 |   3 |    2 |      1 | first    |

|       83 | Hope      |       5 |   0 |    3 |      1 | first    |

|      112 | Bailey    |      12 |   1 |    3 |      2 | second   |

|        8 | Newcastle |      13 |   0 |    3 |      2 | second   |

+----------+-----------+---------+-----+------+--------+----------+

5 rows in set (0.04 sec)

 

二、查看视图:

show table status from 数据库名 \G     //查看数据库里面的视图和表信息

DESCRIBE | DESC view_name            //查看某个视图的信息

show create view view_name\G;      //查看视图的定义信息

 

三、视图的更改

 

1、CREATE OR REPLACE VIEW语句修改视图

 

基本格式:

 

  create or replace view view_name as select语句;

 

在视图存在的情况下可对视图进行修改,视图不在的情况下可创建视图

 

2、ALTER语句修改视图

 

ALTER

VIEW view_name [字段]

AS 

select_statement

 

四、 drop删除视图

 

  删除视图是指删除数据库中已存在的视图,删除视图时,只能删除视图的定义,不会删除数据,也就是说不动基表。Drop语句可以同时删除多个视图。

 

DROP VIEW [IF EXISTS]   

view_name1,view_name2,...

如果视图不存在,则抛出异常;使用IF EXISTS选项使得删除不存在的视图时不抛出异常。