Seele

Seele

視圖與索引

創建和查看視圖#

視圖(view)是一種特殊的表,它可以把數據表的數據查詢或者操作抽象成一個獨立的數據庫操作。實際上並不存在於數據庫中。
數據庫中只存儲了視圖的定義,而視圖的實際數據是通過查詢數據庫來獲取的。所以數據庫的內容變化後會影響視圖的數據。

語法:

CREATE VIEW [view_name] AS [SELECT_statement]

提示:

  1. 視圖的名稱不能和數據庫中的其他表名與視圖重複。且視圖的名稱不能以數字開頭。
  2. SELECT_statement 是一個 SELECT 語句。可查詢多個表的數據。對於這個語句有以下限制
    1. 用戶需要有 CREATE VIEW 權限,以及 SELECT 相關表和視圖權限。
    2. SELECT_statement 不能引用系統或用戶變量。
    3. SELECT_statement 不能包含 FROM 子句中的子查詢。
    4. SELECT_statement 不能引用預處理語句參數。

    預處理:創建 SQL 語句模板並發送到數據庫。預留的值使用參數 "?" 標記。例如:

    INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
    
  3. 創建視圖需要引用的表或者視圖存在,但創建完成後可以不存在(但數據肯定會出問題了)。可以用CHECK TABLE檢查表是否存在。
  4. 視圖定義允許使用 ORDER BY 子句。但如果視圖中使用了 ORDER BY 子句,那麼在查詢視圖時,視圖中的數據也會按照 ORDER BY 子句排序。
  5. 視圖定義不能引用臨時表,不能創建臨時表視圖。
  6. WITH CHECK OPTION 關鍵字可以讓視圖檢查視圖中的數據是否有效。

例子#

從單表創建

CREATE VIEW MyView AS
SELECT * FROM MyTable

從多表創建

CREATE VIEW MyView AS
SELECT * FROM MyTable1, MyTable2

從多表創建,並且指定列

CREATE VIEW MyView AS
SELECT MyTable1.id, MyTable1.name, MyTable2.age
FROM MyTable1, MyTable2

從多表創建,並且指定列,並且指定列的順序

CREATE VIEW MyView AS
SELECT MyTable1.id, MyTable1.name, MyTable2.age
FROM MyTable1, MyTable2
ORDER BY MyTable1.id, MyTable2.age

指定視圖中列的名稱即對應關係

CREATE VIEW MyView 
(id,name,number)    AS
SELECT MyTable1.id, MyTable1.name, MyTable2.age
FROM MyTable1, MyTable2

查詢視圖#

視圖可以用於查詢,不建議用於更新數據

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。