• 云途科技成立于2010年 - 专注全球跨境电商服务器租赁托管!
  • 帮助中心

    您可以通过下方搜索框快速查找您想知道的问题

    mysql view(视图)从0学起,以及实例

      in  数据库      Tags: 

    一,什么视图

    视图是存放数据的一个接口,也可以说是虚拟的表。这些数据可以是从一个或几个基本表(或视图)的数据。也可以是用户自已定义的数据。其实视图里面不存放数据的,数据还是放在基本表里面,基本表里面的数据发生变动时,视图里面的数据随之变动。


    二,视图有什么用

    1,视图可以让查询变得很清楚

    如果您要找的数据存放在三张关系表里面,查看数据的时候,你就要写个联合查询了。换种方法,我把联合查询的数据放到视图里面,这样查询起来是不是更方便呢,通phpmyadmin看着是不是更清淅呢。

    2,保护数据库的重要数据,给不同的人看不同的数据

    假如您让别人帮您开发一套系统,但是你又想把真正表的暴露出来,这个时候视图是不是最好的选择呢。

    三,视图的类型

    mysql的视图有三种类型:MERGE、TEMPTABLE、UNDEFINED。如果没有ALGORITHM子句,默认算法是UNDEFINED(未定义的)。算法会影响mysql处理视图的方式。

    1,MERGE,会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。

    2,TEMPTABLE,视图的结果将被置于临时表中,然后使用它执行语句。

    3,UNDEFINED,mysql将选择所要使用的算法。如果可能,它倾向于MERGE而不是TEMPTABLE,这是因为MERGE通常更有效,而且如果使用了临时表,视图是不可更新的。

    四,添加视图

    1,添加规则

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

    2,实例

    mysql> use test;
    Database changed
    mysql> create  algorithm = MERGE view aaa as select * from user;//创建一个视图
    Query OK, 0 rows affected (0.00 sec)

    上面我们说了,视图里面没有真正的数据,那在数据仓库里面,他的存储是什么样子的呢。看下面

    [root@BlackGhost test]# cat /usr/local/mysql/data/test/aaa.frm
    TYPE=VIEW
    query=select `test`.`user`.`id` AS `id`,`test`.`user`.`name` AS `name`,`test`.`user`.`sex` AS `sex` from `test`.`user`
    md5=04d5ab2cc3ffcf3376a5e9c946f858ab
    updatable=1
    algorithm=2
    definer_user=
    definer_host=
    suid=2
    with_check_option=0
    revision=1
    timestamp=2010-10-20 19:59:34
    create-version=1
    source=select * from user
    client_cs_name=utf8
    connection_cl_name=utf8_general_ci
    view_body_utf8=select `test`.`user`.`id` AS `id`,`test`.`user`.`name` AS `name`,`test`.`user`.`sex` AS `sex` from `test`.`user`

    创建的视图,他没有.MYD,.MYI这二个文件,一个是存放数据的,一个存放索引的。在这儿就可以说明数据是存在基本表里面的。

    五,修改视图

    1,修改规则

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

    2,实例

    mysql> alter view aaa as select * from user where id <> any
     -> (select u_id from comment);
    Query OK, 0 rows affected (0.00 sec)

    六,查看,删除视图

    mysql> select * from aaa;    //查看视图数据
    +----+------+-----+
    | id | name | sex |
    +----+------+-----+
    |  3 | tank |   0 |
    |  4 | tank |   0 |
    +----+------+-----+
    2 rows in set (0.00 sec)
    
    mysql> show create view aaa\G;  //查看视图
    *************************** 1. row ***************************
     View: aaa
     Create View: CREATE ALGORITHM=MERGE DEFINER=``@`` SQL SECURITY DEFINER VIEW `aaa` AS select `user`.`id` AS `id`,`user`.`name` AS `name`,`user`.`sex` AS `sex` from `user` where `user`.`id` <> any (select `comment`.`u_id` AS `u_id` from `comment`)
    character_set_client: utf8
    collation_connection: utf8_general_ci
    1 row in set (0.00 sec)
    
    mysql> drop view aaa;   //删除视图
    Query OK, 0 rows affected (0.00 sec)


    • 外贸虚拟主机

      1GB硬盘

      2个独立站点

      1000M带宽

      不限制流量

      美国外贸专用虚拟主机,cPanel面板,每天远程备份.
      服务器配置:2*E5 32核,96GB 内存,4*2TB 硬盘 RAID10 阵列.

      ¥180/年

    • 美国/荷兰外贸VPS

      2核CPU

      1G内存

      30硬盘

      10M带宽

      美国/荷兰外贸云服务器,专注外贸服务器行业12年.
      服务器配置:2*E5 32核,96GB 内存,4*2TB 硬盘 RAID10 阵列.

      ¥99/月

    • 全球外贸服务器

      8核CPU

      32G内存

      1TB硬盘

      1000M带宽

      已部署数据中心:美国洛杉矶/亚特兰大、荷兰、加拿大、英国伦敦、德国、拉脱维亚、瑞典、爱沙尼亚
      自有机柜(全球九大数据中心),稳定在线率:99.9%

      ¥999/月 原价1380

    7*24小时 在线提交工单

    如果您的问题没有得到解决,推荐您在线提交工单,我们的客服人员会第一时间为您解决问题

    展开