zoukankan      html  css  js  c++  java
  • MySQL-快速入门(9)视图

    1、什么是视图

      视图是一个虚表。视图可以进行查询、增加、修改、删除。进行修改、增加、删除,将影响基本表中的数据。

    2、视图相对基本表的优势

      1》简单化:看到的就是想要的字段列,可以简化后续查询。

      2》安全性:通过视图用户只能查询和修改他们所能看到的数据。

      3》逻辑数据独立性:屏蔽基本表结构变化带来的影响。

    3、创建视图

    //1、algorithm表示视图选择的算法,undefined表示MySQL自动选择算法;merge表示将使用的视
    //图语句与视图定义合并起来,使得视图定义的某一部分取代语句对应的部分;temptable表示将
    //视图的结果存入临时表,然后用临时表来执行语句。
    //2、[with [cascaded | local] check option]表示视图在更新时保证在视图的权限范围之内
    //cascaded与local为可选参数,cascaded为默认值,表示更新视图时要满足所有相关视图和表
    //的条件;local表示更新视图时满足该视图本身定义的条件即可。
    //3、创建的视图默认属于当前数据库,如果要创建属于其他数据库的视图,则db_name.view_name
    create
    [or replace] [algorithm = {undefined | merge | temptable}] view view_name [(column_list)] as select_statement [with [cascaded | local] check option]

     1》在单表上创建视图,可以给视图指定不同的字段名,创建的时候会与基本表对齐。

    mysql> create view v_test as select * from test;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from v_test;
    +----+-------+--------+--------+----------+------+
    | id | name  | deptId | salary | t_time   | str  |
    +----+-------+--------+--------+----------+------+
    |  1 | Lucy  |   NULL |   1000 | 10:28:33 | NULL |
    |  2 | Lura  |   NULL |   1200 | 10:28:33 | NULL |
    |  3 | Kevin |   NULL |   1500 | 10:28:33 | NULL |
    |  4 | Nancy |   NULL |   1000 | 22:08:38 | NULL |
    |  5 | Bob   |   NULL |   1200 | 22:08:38 | NULL |
    +----+-------+--------+--------+----------+------+
    5 rows in set (0.01 sec)
    
    mysql> desc v_test;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | id     | int(10)     | NO   |     | 0       |       |
    | name   | varchar(25) | NO   |     | NULL    |       |
    | deptId | int(11)     | YES  |     | NULL    |       |
    | salary | float       | YES  |     | NULL    |       |
    | t_time | time        | YES  |     | NULL    |       |
    | str    | varchar(4)  | YES  |     | NULL    |       |
    +--------+-------------+------+-----+---------+-------+
    6 rows in set (0.00 sec)
    
    mysql> desc test;
    +--------+-------------+------+-----+---------+----------------+
    | Field  | Type        | Null | Key | Default | Extra          |
    +--------+-------------+------+-----+---------+----------------+
    | id     | int(10)     | NO   | PRI | NULL    | auto_increment |
    | name   | varchar(25) | NO   |     | NULL    |                |
    | deptId | int(11)     | YES  |     | NULL    |                |
    | salary | float       | YES  |     | NULL    |                |
    | t_time | time        | YES  |     | NULL    |                |
    | str    | varchar(4)  | YES  |     | NULL    |                |
    +--------+-------------+------+-----+---------+----------------+
    6 rows in set (0.00 sec)
    
    mysql>

      2》在多表上创建视图,基本同单表的操作。

      3》查看视图:权限show view;方法有describe、show table status、show create view、views表中查询视图信息。

         1>describe / desc

    describe / desc view_name;

         2>show table status

    show table status like 'view_name';

         3>show create view

    show create view view_name;

         4>views表中查询视图信息

    select * from information_schema.views;
    mysql> select * from information_schema.views where table_name='v_test' G
    *************************** 1. row ***************************
           TABLE_CATALOG: def
            TABLE_SCHEMA: mybatis
              TABLE_NAME: v_test
         VIEW_DEFINITION: select `mybatis`.`test`.`id` AS `id`,`mybatis`.`test`.`nam
    e` AS `name`,`mybatis`.`test`.`deptId` AS `deptId`,`mybatis`.`test`.`salary` AS
    `salary`,`mybatis`.`test`.`t_time` AS `t_time`,`mybatis`.`test`.`str` AS `str` f
    rom `mybatis`.`test`
            CHECK_OPTION: NONE
            IS_UPDATABLE: YES
                 DEFINER: root@localhost
           SECURITY_TYPE: DEFINER
    CHARACTER_SET_CLIENT: gbk
    COLLATION_CONNECTION: gbk_chinese_ci
    1 row in set (0.00 sec)
    
    mysql>

    4、修改视图,两种方式

       1》create or replace view

    //与创建视图的语句格式一致
    create
    [or replace] [algorithm ={undefined | merge | temptable}] view view_name [(column_list)] as select_statement [with [cascaded | local] check option]

        2》使用alter语句修改

    alter [algorithm ={undefined | merge | temptable}]
    view view_name [(column_list)]
    as select_statement
    [with [cascaded | local] check option]

    5、更新视图

       1》insert

    insert into view_name ...

       2》delete

    delete from view_name ...

       3》update

    update view_name set ...

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

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

          2>>在定义视图的select语句后的字段列表中使用使用了数学表达式。

          3>>在定义视图的select语句后的字段列表中使用聚合函数。

          4>>在定义视图的select语句中使用了distict、union、top、group by或having子句。

    6、删除视图

    drop view [if exists]
      view_name [,view_name] ...
      [restrict | cascade]
  • 相关阅读:
    appium之模拟坐标方法介绍
    mysql操作数据库常用命令
    appium使用无线连接手机方法
    mysql数据之增删改操作
    mysql之子查询与分组查询
    selenium之多个窗口之间切换
    selenium之内嵌网页iframe切换
    CF103E
    CF724E
    光伏元件
  • 原文地址:https://www.cnblogs.com/ZeroMZ/p/11462750.html
Copyright © 2011-2022 走看看