• mysql 内置功能 视图 使用


    #语法:CREATE VIEW 视图名称 AS  SQL语句

    增加了一张表
    mysql> create view course2teacher as select * from course inner join teacher on course.teacher_id=teacher.tid;
    Query OK, 0 rows affected (0.28 sec)
    
    
    mysql> show tables;
    +----------------+
    | Tables_in_db2  |
    +----------------+
    | class          |
    | course         |
    | course2teacher |
    | score          |
    | student        |
    | teacher        |
    +----------------+
    6 rows in set (0.00 sec)
    
    

    创建一张表 都会在mysql 指定数据库目录里面添加 表结构文件表数据文件

    而刚才用视图创建的course2teacher表只有表结构,没有表数据

    因为他的数据来自于其他表,查询出来的

    [root@mysql db2]# pwd
    /data/mysql/db2
    [root@mysql db2]# ll
    总用量 612
    -rw-rw----. 1 mysql mysql   8594 11月  3 23:33 class.frm
    -rw-rw----. 1 mysql mysql  98304 11月  3 23:33 class.ibd
    -rw-rw----. 1 mysql mysql    906 11月 11 02:49 course2teacher.frm
    -rw-rw----. 1 mysql mysql   8632 11月  3 23:33 course.frm
    -rw-rw----. 1 mysql mysql 114688 11月  3 23:33 course.ibd
    -rw-rw----. 1 mysql mysql     61 11月  3 23:33 db.opt
    -rw-rw----. 1 mysql mysql   8668 11月  3 23:33 score.frm
    -rw-rw----. 1 mysql mysql 131072 11月  3 23:33 score.ibd
    -rw-rw----. 1 mysql mysql   8662 11月  3 23:33 student.frm
    -rw-rw----. 1 mysql mysql 114688 11月  3 23:33 student.ibd
    -rw-rw----. 1 mysql mysql   8590 11月  3 23:33 teacher.frm
    -rw-rw----. 1 mysql mysql  98304 11月  3 23:33 teacher.ibd
    视图创建的虚拟表可以当做真正的表来用
    mysql> select * from course2teacher;
    +-----+--------+------------+-----+-----------------+
    | cid | cname  | teacher_id | tid | tname           |
    +-----+--------+------------+-----+-----------------+
    |   1 | 生物   |          1 |   1 | 张磊老师        |
    |   2 | 物理   |          2 |   2 | 李平老师        |
    |   4 | 美术   |          2 |   2 | 李平老师        |
    |   3 | 体育   |          3 |   3 | 刘海燕老师      |
    +-----+--------+------------+-----+-----------------+
    4 rows in set (0.37 sec)
    
    

    每次执行select * from course2teacher;语句 都会触发 select * from course inner join teacher on course.teacher_id=teacher.tid; 运行

    把结果当做course2teacher这种虚拟表

    不用重复写表

    #!!!注意注意注意:
    #1. 使用视图以后就无需每次都重写子查询的sql,但是这么效率并不高,还不如我们写子查询的效率高
    
    #2. 而且有一个致命的问题:视图是存放到数据库里的,如果我们程序中的sql过分依赖于数据库中存放的视图,
    那么意味着,一旦sql需要修改且涉及到视图的部分,则必须去数据库中进行修改。
    视图是用来方便查的 ,视图不应该改
    单表不用视图,
    多表连接表查询时候才用到视图

    我们不应该修改视图中的记录,而且在涉及多个表的情况下是根本无法修改视图中的记录的

    删除视图

    语法:DROP VIEW 视图名称
    
    DROP VIEW course2teacher
     
  • 相关阅读:
    codeforces 540D Bad Luck Island (概率DP)
    Codevs 1205 单词反转(Vector以及如何输出string)
    Codeforces 977D Divide by three, multiply by two(拓扑排序)
    Codeforces 977B Two-gram(stl之string掉进坑)
    HDU 6186 CS Course (连续位运算)
    HDU 1005 Number Sequence(矩阵快速幂,快速幂模板)
    HDU 1004 Let the Balloon Rise(STL初体验之map)
    2018天梯赛、蓝桥杯、(CCPC省赛、邀请赛、ICPC邀请赛)校内选拔赛反思总结!
    Newcoder Wannafly13 B Jxy军训(费马小定理、分数在模意义下的值)
    TCP的可靠传输(依赖流量控制、拥塞控制、连续ARQ)
  • 原文地址:https://www.cnblogs.com/mingerlcm/p/9940298.html
Copyright © 2020-2023  润新知