1. 程式人生 > >MySQL<視圖>

MySQL<視圖>

信息 重復 emp 存儲 導出 esc 格式 lte cad

視圖

  視圖概述

    視圖是指從一個或幾個基本表中導出的表,可以像操作基本表一樣操作視圖。視圖中只存放視圖定義而不存放視圖對應的數據。

    如果基本表的數據發生變化,從視圖中查詢出的數據也會發生變化。因此可以把視圖認為是一個虛擬表。

  優點

    簡化查詢語句

   日常開發中我們可以將經常使用的查詢定義為視圖,從而使用戶避免大量重復的操作。

安全性

   通過視圖用戶只能查詢和修改他們所能見到的數據,數據庫中的其他數據則既看不到也取不到。

    邏輯數據獨立性

    視圖可以幫助用戶屏蔽真實表結構變化帶來的影響。

視圖管理

  創建視圖的語法格式

    create view<視圖名>[(<列名>...)] as 子查詢 [WITH CHECK OPTION]

    子查詢可以出現任意select語句,但通常在查詢語句中不允許出現Order by和DISTINCT

  在單表上創建視圖

  在多表上創建視圖

  查看視圖

    使用DESCRIBE語句可以查看視圖的字段信息

    DESCRIBE 視圖名;

    或DESC 視圖名;

    使用SHOW TABLE STATUS語句可以查看視圖的基本信息

    SHOW TABLE STATUS LIKE ‘視圖名‘

    使用SHOW CREATE VIEW語句不僅可以查看創建視圖時的定義語句,還可以查看視圖的字符編碼

    SHOW CREATE VIEW 視圖名;

  修改視圖

    由於視圖是不實際存儲數據的虛擬表,因此更新視圖的操作,最終要轉化為對基本表的更新操作。為了防止對視圖進行數據更新時,對不屬於視圖範圍的基本表數據進行操作,可以在定義視圖時加上WITH CHECK OPTION子句。

    我們發現表中數據發生了改變。由於視圖多是給用戶進行瀏覽的,並不需要其進行修改,所以這樣做很不安全。所以我們一般在SQL語句末尾加上WITH CHECK OPTION子句,這樣用戶就不能隨意進行修改了。

    1、使用CREATE OR REPLACE VIEW語句修改視圖

      CREATE [OR REPLACE ][ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

      VIEW view_name [(column_list)]

      AS SELECT_statement

      [WITH[CASCADED | LOCAL] CHECK OPTION]

    2、使用ALTER語句修改視圖

      ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

      VIEW view_name [(column_list)]

      AS SELECT_statement

      [WITH[CASCADED | LOCAL] CHECK OPTION]

  更新視圖

    當視圖中包含有如下內容時,視圖的更新操作將不能被執行:

    視圖中不包含基本表中被定義為非空的列。

    在定義視圖的SELECT語句後的字段列表中使用了數學表達式。

    在定義視圖的SELECT語句後的字段列表中使用聚合函數。

    在定義視圖的SELECT語句中使用了DISTINCT,UNION,TOP,GROUP BY或HAVING子句。

    使用UPDATE語句更新視圖

    使用DELETE語句更新視圖

    使用INSERT語句更新視圖

  刪除視圖

    只能刪除視圖的定義,不會刪除數據。

    drop view <視圖名>

    應用案例--視圖的應用

MySQL<視圖>