mysql-視圖
阿新 • • 發佈:2017-06-09
需要 mysql 定義 having 提高 undefined date 結果 插入
視圖:
視圖從已經存在的表中導出,還可以從已經存在的視圖導出,數據庫只保存視圖的定義,而沒有存放視圖的數據。視圖的數據還是保存在原來的表中。
視圖的數據依賴於原來的表,一旦原來的表發生改變,視圖的數據也相應變化。刪除或更新視圖的數據,原表的數據也會一起改變。
如果需要經常查詢多個表的制定字段的數據,可以在這些表上建立一個視圖。
MySQL的視圖不支持輸入參數的功能。
視圖的作用:可以起到篩選器的作用,那些對用戶沒有用或者用戶沒有權限了解的信息可以直接屏蔽掉,歸納為:使操作簡化,增加數據的安全性,提高表的邏輯獨立性。
既:虛表
語法:
(
create or replace view view_name [(field1_name,field2_name, ...)] as select_statement where ...
)
創建視圖:
create or replace view temp as select student.name
as ‘姓名‘,score.math+score.chinese+score.english+score.mul as ‘總成績‘ from student,score where student.id=score.s_id;
create or replace view temp (姓名,總分)
as select student.name,score.math+score.chinese+score.english+score.mul from student,score where student.id=score.s_id;
刪除視圖:
drop view temp_name;
修改視圖:
alter view view_name (field1_name,field2_name ... ) as select field1_name,field2_name ... from tb_name;
更新視圖:
update view_name set field_name=value where ...
刪除數據:
delete from view_name where ...
怎麽判斷一個表時虛表還是實表:
show table status like ‘table_name/view_name‘; status(狀態) 虛表的所有屬性都是空,而實表都有所有屬性。
增加或刪除視圖中的字段都可以直接創建一個新的視圖去替換原來的視圖。用創建視圖的語法。
不能直接向圖中插入數據,插入數據都只能直接操作實表。
algorithm(算法) merge(合並) temptable(臨時表) undefined(未定義):
對於merge ,會將引用視圖的語句的文本與視圖定義合並起來,使得視圖定義的某一部分取代語句的對應部分。
對於temptable,視圖的結果將被置於臨時表中,然後使用它執行語句。
對於undefined,mysql自己選擇所要使用的算法。如果可能,它傾向於merge而不是temptable,這是因為merge通常更有效,而且如果使用了臨時表,視圖是不可更新的。
當視圖中包含如下內容的時候,視圖的更新操作將不能被執行
(1)視圖中包含基本中被定義為非空的列
(2)定義視圖的SELECT語句後的字段列表中使用了數學表達式
(3)定義視圖的SELECT語句後的字段列表中使用聚合函數
(4)定義視圖的SELECT語句中使用了DISTINCT、UNION、TOP、GROUP BY 、HAVING子句
mysql-視圖