国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL VIEW(視圖)學習筆記

2024-07-24 12:36:48
字體:
來源:轉載
供稿:網友

視圖就是存儲下來的SQL SELECT語句,也可以說是虛擬的表(在MySQL中視圖被當著表來用)。這些數據可以是從一個或幾個基本表(或視圖)的數據。也可以是用戶自已定義的數據。其實視圖里面不存放數據的,數據還是放在基本表里面,基本表里面的數據發生變動時,視圖里面的數據隨之變動

視圖的作用:

■視圖可以讓查詢變得很清楚:

如果您要找的數據存放在三張關系表里面,查看數據的時候,你就要寫個聯合查詢了。換種方法,我把聯合查詢的數據放到視圖里面,這樣查詢起來是不是更方便呢?

■保護數據庫的重要數據,給不同的人看不同的數據:

假如您讓別人幫您開發一套系統,但是你又想把真正表的暴露出來,這個時候視圖是不是最好的選擇呢?

視圖的類型:

mysql的視圖有三種類型:MERGE、TEMPTABLE、UNDEFINED。如果沒有ALGORITHM子句,默認算法是UNDEFINED(未定義的)。算法會影響MySQL處理視圖的方式。

1,MERGE,會將引用視圖的語句的文本與視圖定義合并起來,使得視圖定義的某一部分取代語句的對應部分。

2,TEMPTABLE,視圖的結果將被置于臨時表中,然后使用它執行語句。

3,UNDEFINED,MySQL將選擇所要使用的算法。如果可能,它傾向于MERGE而不是TEMPTABLE,這是因為MERGE通常更有效,而且如果使用了臨時表,視圖是不可更新的。

二、創建、刪除視圖:

創建視圖基本語法,代碼如下:

  1. CREATE  
  2.     VIEW view_name [(column_list)]  
  3.     AS select_statement  
  4.     [WITH [CASCADED | LOCALCHECK OPTION
  5.  
  6. mysql> CREATE VIEW sc AS SELECT s.Name,c.Cname FROM students AS s RIGHT JOIN courses AS c ON s.CID1=c.CID;  
  7. Query OK, 0 rows affected (0.07 sec) 
  8. mysql> SHOW TABLES;  
  9. +------------------+  
  10. | Tables_in_jiaowu   |  
  11. +------------------+  
  12. | courses                |  
  13. | sc                        |  
  14. | scores                  |  
  15. | students              |  
  16. | tutors                  |  
  17. +------------------+  
  18. rows in set (0.01 sec) 
  19. mysql> SELECT * FROM sc;  
  20. +--------------+------------------+  
  21. Name             | Cname                |  
  22. +--------------+------------------+  
  23. | GuoJing         | TaiJiquan             |  
  24. | YangGuo       | TaiJiquan             |  
  25. | DingDian       | Qishangquan       |  
  26. | HuFei             | Wanliduxing        |  
  27. | HuangRong    | Qianzhuwandushou|  
  28. | YueLingshang | Wanliduxing        |  
  29. | ZhangWuji      | Hamagong          |  
  30. | Xuzhu             | TaiJiquan             |  
  31. NULL              | Yiyangzhi            |  
  32. NULL              | Jinshejianfa         |  
  33. NULL              | Qiankundanuoyi |  
  34. NULL              | Pixiejianfa           |  
  35. NULL              | Jiuyinbaiguzhua  |  
  36. +--------------+------------------+  
  37. 13 rows in set (0.02 sec) 

刪除視圖基本語法,代碼如下:

  1. DROP VIEW [IF EXISTS]  
  2.     view_name [, view_name] ...  
  3.     [RESTRICT | CASCADE
  4.  
  5. mysql> DROP VIEW IF EXISTS sc;  
  6. Query OK, 0 rows affected (0.01 sec) 

查看視圖創建過程,代碼如下:

  1. mysql> SHOW CREATE VIEW scG  
  2. *************************** 1. row ***************************  
  3.                 View: sc  
  4.          Create ViewCREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `sc` AS select `s`.`NameAS `Name`,`c`.`Cname` AS `Cname` from (`courses` `c` left join `students` `s` on((`s`.`CID1` = `c`.`CID`)))  //Vevb.com
  5. character_set_client: utf8  
  6. collation_connection: utf8_general_ci  
  7. 1 row in set (0.00 sec) 

三、在MySQL中使用視圖的注意事項:

(1) 運行創建視圖的語句需要用戶具有創建視圖(crate view)的權限,若加了[or replace]時,還需要用戶具有刪除視圖(drop view)的權限;

(2) select語句不能包含from子句中的子查詢;

(3) select語句不能引用系統或用戶變量;

(4) select語句不能引用預處理語句參數;

(5) 在存儲子程序內,定義不能引用子程序參數或局部變量;

(6)在定義中引用的表或視圖必須存在,但是,創建了MySQL視圖后,能夠舍棄定義引用的表或視圖。要想檢查視圖定義是否存在這類問題,可使用check table語句;

(7) 在定義中不能引用temporary表,不能創建temporary視圖;

(8) 在視圖定義中命名的表必須已存在;

(9) 不能將觸發程序與視圖關聯在一起;

(10) 在視圖定義中允許使用order by,但是,如果從特定視圖進行了選擇,而該視圖使用了具有自己order by的語句,它將被忽略.

(11)MySQL視圖不支持霧化,即將視圖保持為實際的數據,也不能創建索引,因此效率較低.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安龙县| 临泽县| 上饶市| 张家口市| 无极县| 枣阳市| 额敏县| 托里县| 蒙山县| 永兴县| 衡水市| 甘谷县| 黄陵县| 壤塘县| 衡水市| 清流县| 洛阳市| 吕梁市| 勃利县| 武夷山市| 会宁县| 浦县| 黔南| 固镇县| 仙桃市| 英德市| 新龙县| 北海市| 泰来县| 黎城县| 陆良县| 鹤峰县| 略阳县| 高邑县| 淄博市| 宁城县| 尚志市| 晋州市| 正蓝旗| 时尚| 定西市|