MySQL _ 11 _ 视图



01 _ 视图概述


数据库中的视图是一个虚拟表。同真实的表一样,视图包含一系列带有名称的行和列数据。行和列数据来自由定义视图查询所引用的表(一个或多个表),并且在引用视图时动态生成。

视图还可以从已经存在的视图的基础上定义。

视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样在数据库中再存储一份,通过视图看到的数据只是存放在基本表中的数据。对视图的操作与对表的操作一样,可以对其进行查询、修改和删除。当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化;同时,若基本表的数据发生变化,则这种变化也可以自动反映到视图中。

视图的作用

与直接从数据表中读取相比,视图有以下优点:

1.简单化

看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化它们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

2.安全性

通过视图用户只能查询和修改他们所能见到的数据。数据库中的其他数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:

  • 使用权限可被限制在基表的行的子集上。
  • 使用权限可被限制在基表的列的子集上。
  • 使用权限可被限制在基表的行和列的子集上。
  • 使用权限可被限制在多个基表的连接所限定的行上。
  • 使用权限可被限制在基表中的数据的统计汇总上。
  • 使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。

3.逻辑数据独立性

视图可帮助用户屏蔽真实表结构变化带来的影响。




02 _ 创建视图

视图中包含了SELECT查询的结果,因此视图的创建基于SELECT语句和已存在的数据表。视图可以建立在一张表上,也可以建立在多张表上。

语法格式:

Create [Or Replace] [Algorithm = {
  Undefined | Merge | TempTable}]
View view_name [(column_list)]
As Select_statement
[With [Cascaded | Local] Check Option]

-----------------------------------------------------------------
`Create` -- 创建新的视图
`Replace` -- 表示替换已经创建的视图
`Algorithm` -- 表示视图选择的算法
	--- Undefined | Merge | Temptable。
	--- `Undefined` -- 默认,表示MySQL将自动选择算法;
	--- `Merge` -- 表示将使用的视图语句与视图定义合并起来,使得视图定义的某一部分取代语句对应的部分;
	--- `Temptable` -- 表示将视图的结果存入临时表,然后用临时表来执行语句。

`view_name` -- 为视图的名称
`column_list` -- 属性列
`SELECT_statement` -- 表示SELECT语句
`With [Cascaded | Local] CHECK OPTION` -- 参数表示视图在更新时保证在视图的权限范围之内。
	--- Cascaded | Local 为可选参数:
	--- `Cascaded` -- 为默认值,表示更新视图时要满足所有相关视图和表的条件
	--- `Local` -- 表示更新视图时满足该视图本身定义的条件即可。

在单个数据表上创建视图:

Create Table 11_student(
    s_id INT,
    name VarChar(40)
);
Create Table 11_stu_info(
	s_id INT,
    glass VarChar(40),
    addr VarChar(90)
);
  1. 创建基本表并插入数据
mysql> Create Table t11(quantity INT,price INT);
Query OK, 0 rows affected (0.59 sec)

mysql> Insert Into t11 Values(3,50);
Query OK, 1 row affected (0.36 sec)
  1. 在t11表上创建一个名为view_t11_1的视图,并使用。
mysql> Create View view_t11_1 As Select quantity,price,quantity*price From t11;
Query OK, 0 rows affected (0.40 sec)

mysql> Select * From view_t11_1;
+----------+-------+----------------+
| quantity | price | quantity*price |
+----------+-------+----------------+
|        3 |    50 |            150 |
+----------+-------+----------------+
1 row in set (0.01 sec)

默认情况下,创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图。

  1. 在t11表上创建一个名为view_t11_2的视图,并使用。这次指定视图的字段名。
mysql> Create View view_t11_2(qty,price,total) As Select quantity,price,quantity*price From t11;
Query OK, 0 rows affected (0.01 sec)

mysql> Select * From view_t11_2;
+------+-------+-------+
| qty  | price | total |
+------+-------+-------+
|    3 |    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值