MySql视图

作者: 技术老男孩 | 来源:发表于2023-02-20 07:33 被阅读0次

    一、MySql视图概念:

    • 类似于linux系统的链接文件(ln)
    • 视图只有表头,没有数据,使用视图数据时,会从原来的表中取出对应的数据
    • 创建视图表所生成的/var/lib/mysql/库/表路径中只有ibd文件(存放表头信息)
    • 访问视图,查看到的数据由创建视图时,执行的查询语句决定
    • 一旦视图表中的数据发生改变,原来表中的数据也会发生变化,反之亦然
    • 创建的视图库,也可以创建普通的表

    二、MySql视图的优点:

    • 简单:用户不需要知道视图的数据来源,视图中的数据已经实时时过滤好的符合条件的结果集
    • 安全:用户只能看到视图中的数据
    • 数据独立:一旦视图结构确定,可以屏蔽表结构对用户的影响

    三、语法格式:

    创建视图

    create view 库.视图名称 as Select查询命令;
    create view 库.视图名称(字段名列表) as Select查询命令;

    查看视图

    • 查看当前库里哪些表是视图
      use 库.视图名称;
      show table status where comment="VIEW"\G
    • 查看视图表里的数据是从哪个基表获取的
      show create view 库.视图名称 \G

    操作视图

    与普通表一样(select insert update delete)

    删除视图

    drop view 库.视图名称;

    四、使用示例:

    • 创建视图
    # 创建一个库,用来存放视图表
    mysql> create database viewdb1;
    # 创建一个基于tarena.user表的视图
    mysql> create view viewdb1.vtab1(姓名,用户编号) as select name,uid from tarena.user;
    Query OK, 0 rows affected (0.00 sec)
    mysql> desc viewdb1.vtab1;
    +--------------+----------+------+-----+---------+-------+
    | Field        | Type     | Null | Key | Default | Extra |
    +--------------+----------+------+-----+---------+-------+
    | 姓名         | char(20) | YES  |     | NULL    |       |
    | 用户编号     | int(11)  | YES  |     | NULL    |       |
    +--------------+----------+------+-----+---------+-------+
    2 rows in set (0.00 sec)
    
    • 查看视图
    # 进入viewdb1视图表中
    mysql> use viewdb1
    # 查看当前库里哪些表是视图
    mysql> show table status where comment="VIEW" \G
    *************************** 1. row ***************************
               Name: vtab
             Engine: NULL
            Version: NULL
         Row_format: NULL
               Rows: NULL
     Avg_row_length: NULL
        Data_length: NULL
    Max_data_length: NULL
       Index_length: NULL
          Data_free: NULL
     Auto_increment: NULL
        Create_time: NULL
        Update_time: NULL
         Check_time: NULL
          Collation: NULL
           Checksum: NULL
     Create_options: NULL
            Comment: VIEW
    # 查看视图表里的数据是从哪个基表获取的
    mysql> show create view viewdb1.vtab1 \G
    *************************** 1. row ***************************
                    View: vtab1
             Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vtab1` AS select `tarena`.`user`.`name` AS `姓名`,`tarena`.`user`.`uid` AS `用户编号` from `tarena`.`user`
    character_set_client: utf8
    collation_connection: utf8_general_ci
    1 row in set (0.00 sec)
    
    • 删除视图
    mysql> drop viewdb1.vtab;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'viewdb1.vtab' at line 1
    # 需要加上view才能删除成功
    mysql> drop view viewdb1.vtab;
    Query OK, 0 rows affected (0.00 sec)
    

    相关文章

      网友评论

        本文标题:MySql视图

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