mysql 內置功能 視圖介紹
阿新 • • 發佈:2018-11-13
pre 虛擬 表連接 comm 查找 操作 each 保存 效率
之前的多表查詢本質是把多張有關系的表連接在一起組成一張虛擬表,從而進行查詢
視圖
視圖是一個虛擬表(非真實存在),其本質是【根據SQL語句獲取動態的數據集,並為其命名】,
用戶使用時只需使用【名稱】即可獲取結果集,可以將該結果集當做表來使用。
使用視圖我們可以把查詢過程中的臨時表摘出來,用視圖去實現,這樣以後再想操作該臨時表的數據時就無需重寫復雜的sql了,直接去視圖中查找即可,但視圖有明顯地效率問題,並且視圖是存放在數據庫中的,如果我們程序中使用的sql過分依賴數據庫中的視圖,即強耦合,那就意味著擴展sql極為不便,因此並不推薦使用
#兩張有關系的表
mysql>use db2; mysql> show tables; +---------------+ | Tables_in_db2 | +---------------+ | class | | course | | score | | student | | teacher | +---------------+ 5 rows in set (0.00 sec)
mysql> select * from course; +-----+--------+------------+ | cid | cname | teacher_id |+-----+--------+------------+ | 1 | 生物 | 1 | | 2 | 物理 | 2 | | 3 | 體育 | 3 | | 4 | 美術 | 2 | +-----+--------+------------+ 4 rows in set (0.00 sec) mysql> select * from teacher; +-----+-----------------+ | tid | tname | +-----+-----------------+| 1 | 張磊老師 | | 2 | 李平老師 | | 3 | 劉海燕老師 | | 4 | 朱雲海老師 | | 5 | 李傑老師 | +-----+-----------------+ 5 rows in set (0.00 sec)
這是一張虛擬表 臨時的表 但是要重復寫虛擬寫
mysql> select * from course inner join teacher on course.teacher_id=teacher.tid; +-----+--------+------------+-----+-----------------+ | cid | cname | teacher_id | tid | tname | +-----+--------+------------+-----+-----------------+ | 1 | 生物 | 1 | 1 | 張磊老師 | | 2 | 物理 | 2 | 2 | 李平老師 | | 4 | 美術 | 2 | 2 | 李平老師 | | 3 | 體育 | 3 | 3 | 劉海燕老師 | +-----+--------+------------+-----+-----------------+ 4 rows in set (0.16 sec)
如果想虛擬表重復使用,視圖就是把sql語句查詢出來的虛擬表保存起來,以後再使用
類似於python的變量 把查詢的結果就是一張虛擬表 賦值給一個變量 ,然後可以直接調用這個變量顯示查詢的虛擬表結果
mysql 內置功能 視圖介紹