七、MySQL視圖語法基礎

視圖是從一個或多個表中導出來的表,是一種虛擬存在的表,並且表的結構和數據都依賴於基本表。通過視圖可以看到基本表中的數據,也可以像操作基本表一樣操作視圖,進行增刪改查。可以簡化查詢語句,具有更高的安全性,邏輯數據獨立性。

視圖管理

創建視圖語法格式

CREATE [OR REPLACE] [ALGORITHM] = {UNDEFINED或者MERGE或者TEMPTABLE}
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED或者LOCAL] CHECK OPTION]
 
CREATE 創建視圖的關鍵字
OR REPLACE 該字句表示若已存在視圖,則可替換
ALGORITHM 表示視圖選擇的算法
UNDEFINED 表示MySQL將自動選擇所要的算法
MERGE 表示將使用視圖的語句與視圖定義合併起來,是的視圖定義的某一部分取代語句的對應部分
TEMPTABLE 表示將視圖的結果存入臨時表,然後用臨時表執行語句
view_name 視圖名稱
column_list 屬性清單,指定視圖中各個屬性的名,默認情況下,與select語句中查詢的屬性相同
SELECT_statement 一個完整的查詢語句,表示從某個表或視圖中查出某些符合條件的記錄,並導入視圖中
WITH CHECK OPTION 表示創建視圖時要保證在該視圖的權限範圍內
CASCADED 表示創建視圖時,需要滿足跟該視圖有關的所有相關視圖和表的條件,該參數爲默認值
LOCAL 表示創建該視圖時,只要滿足該視圖本身定義的條件即可

在單表上創建視圖

例一:現有student表(id,name,math,chinese),創建視圖包含數學成績,語文成績,總成績

create VIEW view_stu as select math,chinese from student;create or replace VIEW view_stu as select math,chinese,math+chinese from student;create or replace VIEW view_stu2(數學,語文,總分) as select math,chinese,math+chinese from student;

在多表上創建視圖

例一:現有一stu_info表(id,class,address),id爲學生編號,創建視圖,包含編號,姓名,班級

create view stu_class (編號,姓名,班級)asselect student.id,student.name,stu_info.class from student,stu_info where student.id=stu_info.id;

查看視圖

DESCRIBE關鍵字

DESCRIBE 視圖名;  
或者  
DESC 視圖名;  

SHOW TABLE STATUS語句

SHOW TABLE STATUS LIKE '視圖名';

SHOW CREATE VIEW語句:查看視圖創建語句

SHOW CREATE VIEW 視圖名;

修改視圖:修改視圖的定義

CREATE OR REPLACE VIEW語句:重新創建一個視圖覆蓋前一個

例一:使用該語句修改view_stu視圖
create or replace view view_stu as select * from student;

ALTER關鍵字

ALTER [ALGORITHM = {UNDEFINED或者MERGE或者TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH[CASCADED或者LOCAL] CHECK OPTION]
例一:使用ALTER修改視圖
alter view view_stu as select chinese from student;

更新視圖

  1. 使用UPDATE語句更新視圖,實際修改了原表中的數據
--例一:更新view_stu視圖中chinese子段對應的數據值,改爲100
UPDATE view_stu SET chinese = 100;
  1. INSERT語句來更新視圖
--例一:在原表中插入一條數據
insert into student values(null, 'lili',20,30);
  1. DELETE語句來更新視圖
--例一:刪除視圖裏的一條記錄
delete from view_stu where chinese=30;

注意:以下情況不更新
1、視圖中不包含基本表中表定義爲非空的列
2、定義視圖的SELECT語句後的字段列表中使用了數學表達式
3、在定義視圖的SELECT語句後的字段列表中使用了聚合函數
4、在定義視圖的SELECT語句中使用了DISTINCT,UNION,TOP,GROUP BY或HAVING字句

刪除視圖

DROP VIEW [IF EXISTS] view_name [,view_name1]...[RESTRICT或者CASCADE]l;
例一:刪除view_stu視圖
drop view view_stu;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章