1. 程式人生 > >mysql 內建功能 檢視 使用

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表只有表結構,沒有表資料

因為他的資料來自於其他表,查詢出來的

[[email protected] db2]# pwd
/data/mysql/db2
[[email protected]
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