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

 

 
posted @ 2018-11-13 18:11  minger_lcm  阅读(128)  评论(0编辑  收藏  举报