专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 实例分析MySQL视图的创建

实例分析MySQL视图的创建

更新时间:2021-01-25 17:13:15 来源:动力节点 浏览829次

视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。MySQL作为目前最流行的关系型数据库之一,自然也有视图。视图其实是存储在数据库中的查询的SQL语句,除了出于安全的目的就是能够使复杂的查询易于理解和使用。本文我们就来初步了解MySQL视图的创建

 

一、MySQL创建视图标准语法:

CREATE

    [OR REPLACE]

    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

    [DEFINER = user]

    [SQL SECURITY { DEFINER | INVOKER }]

    VIEW view_name [(column_list)]

    AS select_statement

    [WITH [CASCADED | LOCAL] CHECK OPTION]

语法解读:

1)OR REPLACE:表示替换已有视图,如果该视图不存在,则CREATE OR REPLACE VIEW与CREATE VIEW相同。

2)ALGORITHM:表示视图选择算法,默认算法是UNDEFINED(未定义的):MySQL自动选择要使用的算法 ;merge合并;temptable临时表,一般该参数不显式指定。

3)DEFINER:指出谁是视图的创建者或定义者,如果不指定该选项,则创建视图的用户就是定义者。

4)SQL SECURITY:SQL安全性,默认为DEFINER。

5)select_statement:表示select语句,可以从基表或其他视图中进行选择。

6)WITH CHECK OPTION:表示视图在更新时保证约束,默认是CASCADED。

其实我们日常创建视图时,无需指定每个参数,一般情况下,建议这样创建视图:

create view <视图名称> [(column_list)]

as select语句

with check option;

 

二、MySQL视图创建实例:

# 单表视图

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)

 

# 多表视图

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)

 

视图在使用时和基础表一样,比如我们可以使用 select from view_name 或 select from view_name where ... ,视图可以将我们不需要的数据过滤掉,将相关的列名用我们自定义的列名替换。视图作为一个访问接口,不管基表的表结构和表名有多复杂。一般情况下视图只用于查询,视图本身没有数据,因此对视图进行的dml操作最终都体现在基表中,对视图进行delete、update、insert操作,原表同样会更新,drop视图原表不会变,视图不可以truncate。但是一般情况下我们要避免更新视图,dml操作可以直接对原表进行更新。

 

 

从用户的角度来看,一个视图是从一个特定的角度来查看数据库中的数据。从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表,从数据库系统外部来看,视图就如同一张表一样。不同的角度看待问题,我们能够得到不一样的答案,在本站的MySQL教程中,远远不止这么简单的道理,许多优质的知识在等你汲取!

 

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>