mysql视图创建set_实例分析MySQL视图的创建

视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。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教程中,远远不止这么简单的道理,许多优质的知识在等你汲取!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值