MySQL 视图(十)

视图

  • 数据库中的视图是一个虚拟表。同真实的表一样,视图包含一系列带有名称的行和列数据。行和列数据来自由定义视图查询所引用的表。

视图概述

  • 在视图中用户可以使用 SELECT 语句查询数据,以及使用 INSERTUPDATEDELETE 修改记录。

视图的含义

  • 视图是一个虚拟表,是从数据库中一个或多个表中导出来的表。视图还可以从已经存在的视图的基础上定义。
  • 视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样在数据库中再存储一份,通过视图看到的数据只是存放在基本表中的数据。
  • 当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化;同时,若基本表的数据发生变化,则这种变化也可以自动反映到视图中。

视图的作用

  1. 简单化
  2. 安全性
  3. 逻辑数据独立性

创建视图

创建视图的语法形式

  • 创建视图使用 CREATE VIEW 语句,基本语法格式如下:

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

    其中,CREATE 表示创建新的视图;REPLACE 表示替换已经创建的视图;

    ALGORITHM 表示视图选择的算法;

    view_name 为视图的名称,column_list 为属性列;

    SELECT_statement 表示 SELECT 语句;

    WITH [CASCADED | LOCAL] CHECK OPTION 参数表示视图在更新时保证在视图的权限范围之内。

    • ALGORITHM 的取值:
      1. UNDEFINED:表示 MySQL 将自动选择算法
      2. MERGE:表示将使用的视图语句与视图定义合并起来,使得视图定义的某一部分取代语句对应的部分
      3. TEMPTABLE:表示将视图的结果存入临时表,然后用临时表来执行语句
    • CASCADED 与 LOCAL
      1. CASCADED:默认值,表示更新视图时要满足所有相关视图和表的条件
      2. LOCAL:表示更新视图时满足该视图本身定义的条件即可

在单表上创建视图

  • MySQL 可以在单个数据表上创建视图。

在多表上创建视图

  • MySQL 中也可以在两个或者两个以上的表上创建视图,可以使用 CREATE VIEW 语句实现。

查看视图

  • 查看视图是查看数据库中已存在的视图的定义。查看视图必须要有 SHOW VIEW 权限,MySQL 数据库下的 user 表中保存着这个信息。

使用 DESCRIBE 语句查看视图基本信息

  • DESCRIBE 可以用来查看视图,具体的语法如下:

    DESCRIBE 视图名;
    

使用 SHOW TABLE STATUS 语句查看视图基本信息

  • 查看视图的信息可以通过 SHOW TABLE STATUS 的方法,具体的语法如下:

    SHOW TABLE STATUS LIKE '视图名';
    

    执行结果除了 Comment 的值为 VIEW,其他的信息均为 NULL,说明这是一个虚表。

使用 SHOW CREATE VIEW 语句查看视图详细信息

  • 使用 SHOW CREATE VIEW 语句可以查看视图详细定义,语法如下:

    SHOW CREATE VIEW 视图名;
    

在 VIEWS 表中查看视图详细信息

  • 在 MySQL 中,information_schema 数据下的 views 表中存储了所有视图的定义。通过对 views 表的查询,可以查看数据库中所有视图的详细信息,查询语句如下:

    SELECT * FROM information_schema.views
    WHERE TABLE_NAME = '视图名';
    

修改视图

  • 当基本表的某些字段发生变化时,可以通过修改视图来保持与基本表的一致性。

使用 CREATE OR REPLACE VIEW 语句修改视图

  • 在 MySQL 中修改视图可以使用 CREATE OR REPLACE VIEW 语句,语法如下:

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

    修改视图的语句和创建视图的语句是完全一样的。当视图已经存在时,修改语句对视图进行修改;当视图不存在时,创建视图。

使用 ALTER 语句修改视图

  • ALTER 语句是 MySQL 提供的另外一种修改视图的方法,语法如下:

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

更新视图

  • 更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。如果对视图增加或者删除记录,实际上是对其基本表增加或者删除记录。基本操作语句与更新表相同。

  • 当视图中含有如下内容时,视图的更新操作将不能被执行:

    (1)视图中不包含基表中被定义为非空的列

    (2)在定义视图的 SELECT 语句后的字段列表中使用了数学表达式

    (3)在定义视图的 SELECT 语句后的字段列表中使用了聚合函数

    (4)在定义视图的 SELECT 语句中使用了 DISTINCTUNIONTOPGROUP BYHAVING 子句。

删除视图

  • 删除一个或多个视图可以使用 DROP VIEW 语句,语法如下:

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

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    686 引用 • 535 回帖
  • 视图
    4 引用
  • 创建视图
    1 引用
  • 查看视图
    1 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...