mysql 內建功能 檢視 使用
阿新 • • 發佈:2018-11-13
#語法: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