美文网首页
Mysql 学习笔记

Mysql 学习笔记

作者: 二十四小时爱你 | 来源:发表于2018-03-10 14:35 被阅读0次

    Mysql 学习笔记(四)

    视图(View)

    ➢ 从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。从数据 库系统内部来看,一个视图是由SELECT 语句组成的查询定义的虚拟表,视图是由一 张或多张表中的数据组成的,从数据库系统外部来看,视图就如同一张表一样,对表能够进行的一般操作都可以应用于视图,例如查询,插入,修改,删除操作等。 视图是一个虚拟表,其内容由查询定义。

    ➢ 视图概述:

    ✓ 视图以经过定制的方式显示来自一个或多个表的数据

    ✓ 视图是一种数据库对象,用户可以象查询普通表一样查询视图。

    ✓ 视图内其实没有存储任何数据,它只是对表的一个查询。

    ✓ 视图的定义保存在数据字典内。创建视图所基于的表为“基表”。

    ✓ 视图一经定义以后,就可以像表一样被查询、修改、删除和更新

    ➢ 视图作用

    ✓ 简化数据查询语句

    ✓ 使用户能从多角度看到同一数据

    ✓ 提高了数据的安全性

    ✓ 提供了一定程度的逻辑独立性

    ✓ 减少带宽流量、优化后还可提高执行效率

    ➢ 视图优点

    ✓ 提供了另外一种级别的表安全性

    ✓ 隐藏的数据的复杂性

    ✓ 简化的用户的 SQL 命令

    ✓ 通过重命名列,从另一个角度提供数据

    (1)视图的创建

    1.创建命令

    CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]

    注:

    ➢ OR REPLACE:给定了 OR REPLACE 子句,语句能够替换已有的同名视图。

    ➢ ALGORITHM:可选的 mysql 算法扩展,算法会影响 MySQL 处理视图的方 式。有以下三个值: UNDEFINED--MySQL 将选择所要使用的算法。如果可能,它倾向于 MERGE 而不是 TEMPTABLE,这是因为 MERGE 通常更有效,而且如果使用了临时表,视图是不可更新的。 MERGE--会将引用视图的语句的文本与视图定义合并起来,使得视图定义 的某一部分取代语句的对应部分。TEMPTABLE--视图的结果将被置于临时表中,然后使用它执行语句。

    1、MERGE,将视图的sql语句和引用视图的sql语句合并在一起,最后一起执行。

    2、TEMPTABLE,将视图的结果集存放在临时表中,每次执行时从临时表中操作。

    3、UNDEFINED,默认的视图类型,DBMS倾向于选择而不是必定选择MERGE,因为MERGE的效率更高,更重要的是临时表视图不能更新。所以,这里推荐使用MERGE算法类型视图。

    view_name :视图名

    column_list: 要想为视图的列定义明确的名称,列出由逗号隔开的列 名。column_list 中的名称数目必须等于 SELECT 语句检索的列数。若使用与源表或视图中相同的列名时可以省略 column_list。

    select_statement : 用来创建视图的 SELECT 语句,可在 SELECT 语 句中查询多个表或视图。但对 SELECT 语句有以下的限制: 1. 定义视图的用户必须对所参照的表或视图有查询(即可执行 SELECT 语句)权限; 2. 在定义中引用的表或视图必须存在;

    WITH [cascaded|local] CHECK OPTION:在关于可更新视图的 WITH CHECK OPTION 子句中,当视图是根据另一个视图定义的时,LOCAL 和 CASCADED 关键字决定了检查测试的范围。LOCAL 关键字对 CHECK OPTION 进行了限制,使其仅作用在定义的视图上,CASCADED 会对将进行评估的基表进行检查。如果未给定任一关键字,默认值为 CASCADED。WITH CHECK OPTION 指出在可更新视图上所进行的修改都要符合 select_statement 所指定的 限制条件,这样可以确保数据修改后,仍可通过视图看到修改的数据。

    例子:create view student_index as select sno,sname,from student; 

    视图--1

    (2)修改视图

    ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]

    注: 该语句用于更改已有视图的定义。其语法与 CREATE VIEW 类似。该语句需要具有 针对视图的 CREATE VIEW 和 DROP 权限,也需要针对 SELECT 语句中引用的每一列的 某些权限。

    例子:alter view student_index as select sno as '学号',sname as '姓名',sage as '年龄' from student; 

    视图--2

    (3)查看视图

    SHOW CREATE VIEW view_name;

    例子:show create view student_index; 

    视图--1 视图--3

    (4)删除视图

    DROP VIEW [IF EXISTS] view_name [, view_name] ... [RESTRICT | CASCADE]

    说明:

    1、DROP VIEW 能够删除 1 个或多个视图。必须在每个视图上拥有 DROP 权限。

    2、可以使用关键字 IF EXISTS 来防止因不存在的视图而出错。

    3、如果给定了 RESTRICT 和 CASCADE,将解析并忽略它们。

    例子:drop view student_index; 

    视图--4

    (5)更新视图

    概述:

    ➢ 视图的使用与表一样,有增删改查四种操作,且语法也与表相同。

    ➢ 在视图上也可以使用修改数据的 DML 语句,如 INSERT、UPDATE 和 DELETE 可以统称为“通过视图更新数据”。

    ➢ 通过视图更新数据有如下限制:

    ✓ 一次只能修改一个底层的基表

    ✓ 如果修改违反了基表的约束条件,则无法更新视图

    ✓ 如果视图中的列不是表中的原始列(如创建视图时使用了连接操作符、 聚合函数等),则不能通过视图更新。

    视图更新操作:

    ➢ 可更新的视图:要通过视图更新基本表数据,必须保证视图是可更新视图, 即可以在 INSET、UPDATE 或 DELETE 等语句当中使用它们。对于可更新 的视图,在视图中的行和基表中的行之间必须具有一对一的关系。还有一 些特定的其他结构,这类结构会使得视图不可更新。

    如果视图包含下述结 构中的任何一种,那么它就是不可更新的:

    ✓ 聚合函数;

    ✓ DISTINCT 关键字;

    ✓ GROUP BY 子句;

    ✓ ORDER BY 子句;

    ✓ HAVING 子句;

    ✓ UNION 运算符;

    ✓ 位于选择列表中的子查询;

    ✓ FROM 子句中包含多个表;

    ✓ SELECT 语句中引用了不可更新视图;

    ➢ 插入数据

    使用 INSERT 语句通过视图向基本表插入数据

    注意:

    ✓ 当视图所依赖的基本表有多个时,不能向该视图插入数据,因为这将 会影响多个基本表。 ✓ 对 INSERT 语句还有一个限制:SELECT 语句中必须包含 FROM 子句 中指定表的所有不能为空的列。

    ➢ 修改数据:使用 UPDATE 语句可以通过视图修改基本表的数据 注意:若一个视图依赖于多个基本表,则一次修改该视图只能变动一个基本表的数据。

    ➢ 删除数据:使用 DELETE 语句可以通过视图删除基本表的数据 注意:对依赖于多个基本表的视图,不能使用 DELETE 语句。

    视图--5

    相关文章

      网友评论

          本文标题:Mysql 学习笔记

          本文链接:https://www.haomeiwen.com/subject/sduvfftx.html