2010-07-27 50 views
11

MySQL中的視圖是什麼?他們的觀點是什麼以及他們在現實世界中的使用頻率如何。MySQL中的視圖是什麼?

我是一個外行解釋請用一個例子,如果可能的話,以幫助我的理解!

預先感謝您;-)

回答

10

普通視圖是沒有更多然後可查詢的查詢。

例子:

你有兩個表,訂單和客戶,訂單有場ID,CUSTOMER_ID,performance_date客戶有ID,名字,姓氏。

現在讓我們說你要顯示訂單ID,執行日期和客戶的名字聯繫在一起,而不是發出此查詢:

SELECT o.id as order_id, c.first_name + ' ' + c.last_name as customer_name, 
      o.performance_date 
FROM  orders o inner join customers c 

,你可以創建一個查詢作爲視圖,並命名爲orders_with_customers,在您的應用程序您現在可以發出查詢

SELECT * 
FROM  orders_with_customer 

一個好處是抽象的,你可以改變你儲存客戶的名稱,如計有中間名的方式,只是改變了看法查詢。所有使用該視圖的應用程序都繼續這樣做,但現在包括中間名。

0

他們共同的過濾器的簡寫。

假設您有一個刪除列的記錄表。通常情況下,您不會對刪除的記錄感興趣,因此您可以創建一個名爲Records的視圖,從AllRecords表中過濾掉已刪除的記錄。

這將使您的代碼清理,因爲您不必爲每個語句添加/添加deleted != 1

SELECT * FROM Records 

會返回所有未刪除的記錄。

0

在簡單的話

在SQL,視圖是基於SQL 語句的結果集的虛擬表 。

一個視圖包含行和列,只是 像一個真正的表。 視圖中的字段是來自數據庫中一個或多個實際表格的字段。

您可以添加SQL函數,WHERE和 JOIN聲明的看法和現在 的數據,如果數據是從一個單一的表來 。

Source

在addtion到這一點,可以在底層table從提供的view,唯一的一個表是由視圖和未在該視圖所引用的列允許空值稱爲插入行。

0

視圖是一種預先定義某些查詢的方法。它可以像查詢表一樣查詢,由查詢定義而不是一組磁盤數據。查詢它可以讓你查詢表格的結果。

在大多數情況下,查詢視圖可視爲等同於將視圖的定義查詢用作主查詢中的子查詢。視圖允許查詢更短,更模塊化(因爲通用部分在視圖中分別定義)。他們也提供了優化的機會(儘管並非所有的數據庫都這樣做;我不確定MySQL是否提供了任何優化來使視圖更快或更快)。

如果更新了基礎表,對照視圖的查詢將自動反映這些更改。

2

很簡單:視圖是虛擬表。

視圖基於對「真實」表的SELECT查詢,但區別在於視圖不存儲與真實表不同的信息。一個視圖只引用這些表並按照SELECT的說法將它們結合起來。這使得經常使用的查詢更加簡化。

下面是一個簡單的例子。假設你有一張僱員表和一個部門表,你希望看到他們的薪水。首先,您可以創建薪水視圖。

CREATE VIEW SALARIES 
AS 
SELECT e.name, 
     e.salary, 
     d.name 
FROM employees AS e, deparments as d 
WHERE e.depid = d.depid 
ORDER BY e.salary DESC 

此查詢列出了員工,他/她的薪水和部門,他們的訂單由降序排列的薪水的名稱。當你這樣做,你可以使用查詢,如:

SELECT * from SALARIES 

在一個規模較大,你可以作出這樣的計算誰擁有工資那是低於平均工資的員工,並列出平均工資的視圖。在現實生活中,這樣的查詢要複雜得多。

1

您可以將視圖視爲一個即時生成的表格。在您的查詢中,它的行爲與普通表類似,但不是存儲在磁盤上,而是在創建視圖時定義的SQL語句中需要的時候創建。

要創建視圖,使用:

CREATE VIEW first_names AS SELECT first_name FROM people WHERE surname='Smith' 

然後,您可以使用此觀點只是作爲一個普通的表。訣竅是當你更新表的人時,first_names視圖也將被更新,因爲它只是SELECT語句的結果。

這個查詢:

SELECT * FROM first_names 

將返回表中的人叫史密斯的人所有的名字。如果您更新人員表並重新運行查詢,您將看到更新後的結果。

基本上,你可以用嵌套的SELECT語句替換視圖。然而,意見有一定的優勢:

  • 縮短查詢 - 嵌套的SELECT語句進行查詢不再
  • 提高可讀性 - 如果視圖有一個合理的名字,查詢更容易理解
  • 更好的速度 - 視圖的SELECT語句存儲在數據庫引擎中,並且是預解析的,因此無需從客戶端傳輸並一遍又一遍地分析
  • 緩存和優化 - 數據庫引擎可以緩存視圖並執行其他優化