• 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
     
  • 相关阅读:
    闭包的坑
    python中@property和property函数使用
    Python3运算符
    内置函数——eval、exec、compile
    内置函数和匿名函数
    迭代器和生成器
    PHP内置的字符串处理函数
    PHP中的抽象类和接口
    PHP面向对象中常用的关键字和魔术方法
    PHP面向对象的程序设计一些简单的概念
  • 原文地址:https://www.cnblogs.com/mingerlcm/p/9940298.html
Copyright © 2020-2023  润新知