1. 程式人生 > >mysql 內置功能 視圖 使用

mysql 內置功能 視圖 使用

重復 多表 註意 oot set -- 必須 tables ted

#語法: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

 

mysql 內置功能 視圖 使用