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

MySQL學習筆記之視圖,mysql學習筆記

編輯:MySQL綜合教程

MySQL學習筆記之視圖,mysql學習筆記


  視圖是對磁盤上保存的表數據的抽象,即抽取一個表或多個表的部分行或列的數據,展示給使用者。

  首先列舉下MySQL中最簡單的對視圖操作的語法:

1、創建視圖:

create view 視圖名 as 
    select語句
例如:
create view v_fruit as
    select name,place,weight from t_fruit 
        where weight<=12;

據我所知,“as”後面的語句肯定都是以“select”開頭的,可以理解成視圖的創建結果就是一張新的表格,表格裡面有哪些東西呢,就是select語句的結果;另外這張新的“表格”的字段與“select”後面的名字對應,在上例中就是name,place,weight,但是也可以用as或省略as的別名形式,改變新“表格”的字段名,例如:

create view v_fruit as
    select name myname,place as myplace,weight from t_fruit 
        where weight<=12;

這樣,“新表格”的包含的所有字段名就是myname,myplace,weight

另外,指定視圖的字段名可以不用在select後面加as的方法,直接在“視圖名”後面加上“(字段1,字段2,...)”的方法,但是括號裡面的個數必須跟實際select出來的字段個數一樣

例如以下實現一樣的字段名設定效果:

create view v_fruit(myname,myplace,weight) as
    select name,place,weight from t_fruit 
        where weight<=12
            with check option;

上面的視圖是在一張表的基礎上創建的,也可以根據多張表連接查詢,或者根據其他的視圖創建,即"from"後面可以跟表名,也可以跟視圖名,但是千萬不能跟子查詢!

例如下面的寫法是錯的:

create view v as
    select id,name,place from (select * from t_fruit)
         where id>3;    

當然,“where”後面跟上子查詢是沒有問題的。

 

2、使用視圖:

  視圖一旦創建,操作起來就跟表格一樣,愛怎麼玩就怎麼玩,至少你往編輯器裡面輸語句,肯定不會報錯。

  實際執行階段就不一樣了,對於select from的查詢操作,肯定不會出任何問題;但是對於增、刪、改,因為視圖實際存儲的只是定義,這三個操作會改動底下的實際的表格,而你看到的view,裡面的數據可能來源於好幾個表格,也有可能是通過和、平均數等計算得到的,一旦insert、delete或者update,改動就會特別復雜。為了保險起見,對於一些情況,增刪改直接會被MySQL系統判定為誤操作,無法成功。這裡修改失敗的情況特別多,只列舉幾個,比如改動涉及到兩個或兩個以上的表會失敗,改動後not null的列沒有值會失敗,view的列值通過sum、count等計算得到的會失敗。

  還有一個問題要注意,如果底下的table的字段發生變動,比如說字段被刪除、重命名等,視圖操作就很容易出現錯誤。因為視圖在定義時,select後面的字段名就定死了,不會隨著表格字段的變動而變動,即使是select *,也會把*直接替換為相應的固定字段。比如一個view裡面本來關聯了A,B,C三個字段,現在table把字段C重命名為D,那麼view對C字段的使用就會出錯。

 

3、修改視圖:

  有兩種方法,一種是常規的alter,另一種可以跟創建視圖的共用

①alter方法,只需把創建時的create改成alter就行,比如:

alter view v_fruit as
    select place as myplace,weight from t_fruit 
        where weight<=12;

②第1點創建視圖裡面漏了沒說,實際上存在創建和修改視圖可以共用的方法:create or replace,只要把create換成這3個單詞,其他不要變

create or replace view v_fruit as
    select place as myplace,weight from t_fruit 
        where weight<=12;

 

 4、刪除視圖:

drop view 視圖名;
或者
drop view 視圖1,視圖2,...

如果某個視圖不存在,則會報錯,但是其他存在的視圖會被正常刪除。

為了防止報錯,可以加上“if exists”關鍵字

drop view if exists 視圖名;

 

5、查看視圖各字段的定義:

describe 視圖名;
或者
desc 視圖名;

  

更深層次分析未完待續。。。

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