程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MYSQL入門知識 >> MySQL數據庫視圖實例詳解

MySQL數據庫視圖實例詳解

編輯:MYSQL入門知識
 

對其中所引用的基礎表來說,視圖的作用類似於篩選。定義視圖的篩選可以來自當前或其它數據庫的一個或多個表,或者其它視圖。通過視圖進行查詢沒有任何限制,通過它們進行數據修改時的限制也很少。

視圖是存儲在數據庫中的查詢的SQL 語句,它主要出於兩種原因:安全原因, 視圖可以隱藏一些數據,如:社會保險基金表,可以用視圖只顯示姓名,地址,而不顯示社會保險號和工資數等,另一原因是可使復雜的查詢易於理解和使用。

  視圖:查看圖形或文檔的方式。

  視圖是從一個或多個表或視圖中導出的表,其結構和數據是建立在對表的查詢基礎上的。和表一樣,視圖也是包括幾個被定義的數據列和多個數據行,但就本質而言這些數據列和數據行來源於其所引用的表。

  所以視圖不是真實存在的基礎表而是一張虛表,視圖所對應的數據並不實際地以視圖結構存儲在數據庫中,而是存儲在視圖所引用的表中。

  視圖一經定義便存儲在數據庫中,與其相對應的數據並沒有像表那樣又在數據庫中再存儲一份,通過視圖看到的數據只是存放在基本表中的數據。對視圖的操作與對表的操作一樣,可以對其進行查詢、修改(有一定的限制)、刪除。

  當對通過視圖看到的數據進行修改時,相應的基本表的數據也要發生變化,同時,若基本表的數據發生變化,則這種變化也可以自動地反映到視圖中。

  視圖有很多優點,主要表現在:
  •視點集中
  •簡化操作
  •定制數據
  •合並分割數據
  •安全性
當然視圖也存在一些缺點,最大的缺點就是視圖帶來的更新負擔,比如源數據改了,那麼視圖中要做相應更新,視圖中數據改了源數據也要做同步,這和MySQL的Cache差不多。

二. 創建視圖——CREATE VIEW

1. 語法


CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW [db_name.]view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]

通過該語句可以創建視圖,若給定了[OR REPLACE],則表示當已具有同名的視圖時,將覆蓋原視圖。select_statement是一個查詢語句,這個查詢語句可從表或其它的視圖中查詢。視圖屬於數據庫,因此需要指定數據庫的名稱,若未指定時,表示在當前的數據庫創建新視圖。

表和數據庫共享數據庫中相同的名稱空間,因此,數據庫不能包含相同名稱的表和視圖,並且,視圖的列名也不能重復。

2. 使用舉例

Eg. 本例創建一個產品表(product)和一個購買記錄表(purchase),再通過視圖purchase_detail查詢出購買的詳細信息。

創建表


CREATE TABLE product
(
product_id INT NOT NULL,
name VARCHAR(50) NOT NULL,
price DOUBLE NOT NULL
);
插入數據


INSERT INTO product VALUES(1, ‘apple ‘, 5.5);
創建表


CREATE TABLE purchase
(
id INT NOT NULL,
product_id INT NOT NULL,
qty INT NOT NULL DEFAULT 0,
gen_time DATETIME NOT NULL
);
插入數據


INSERT INTO purchase VALUES(1, 1, 10, NOW());
創建視圖

CREATE VIEW purchase_detail AS SELECT product.name as name, product .price as price, purchase.qty as qty, product .price * purchase.qty as total_value from product, purchase where product.product_id = purchase.product_id;
創建成功後,輸入:SELECT * FROM purchase_detail;

運行效果如下:

+——-+——-+—–+————-+

| name | price | qty | total_value |

+——-+——-+—–+————-+

| apple | 5.5 | 10 | 55 |

+——-+——-+—–+————-+

1 row in set (0.01 sec)

3. 注意事項

創建視圖存在如下注意事項:

(1) 運行創建視圖的語句需要用戶具有創建視圖(CRATE VIEW)的權限,若加了[OR REPLACE]時,還需要用戶具有刪除視圖(DROP VIEW)的權限;

(2) SELECT語句不能包含FROM子句中的子查詢;

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

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

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

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

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

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

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved