MySQL视图(十)

Published on in MySQL with 0 views and 0 comments

视图

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

视图概述

  • 在视图中用户可以使用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视图(十)
作者:wangdj
地址:https://dblog.cool/articles/2024/11/16/1731762450598.html