MySQL筆記之視圖的使用詳解
2024-07-24 12:40:41
供稿:網友
什么是視圖 視圖是從一個或多個表中導出來的表,是一種虛擬存在的表。 視圖就像一個窗口,通過這個窗口可以看到系統專門提供的數據。 這樣,用戶可以不用看到整個數據庫中的數據,而之關心對自己有用的數據。 數據庫中只存放了視圖的定義,而沒有存放視圖中的數據,這些數據存放在原來的表中。 使用視圖查詢數據時,數據庫系統會從原來的表中取出對應的數據。 視圖中的數據依賴于原來表中的數據,一旦表中數據發生改變,顯示在視圖中的數據也會發生改變。 視圖的作用 1.使操作簡單化,可以對經常使用的查詢定義一個視圖,使用戶不必為同樣的查詢操作指定條件 2.增加數據的安全性,通過視圖,用戶只能查詢和修改指定的數據。 3.提高表的邏輯獨立性,視圖可以屏蔽原有表結構變化帶來的影響。 總而言之,使用視圖的大部分情況是為了保障數據安全性,提高查詢效率 參考表: MySQL筆記之視圖的使用詳解 MySQL筆記之視圖的使用詳解 創建視圖的語法 復制代碼 代碼如下: CREATE [ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}] VIEW 視圖名 [(屬性清單)] AS SELECT 語句 [WITH [CASCADED|LOCAL] CHECK OPTION]; ALGORITHM表示視圖選擇的算法(可選參數) UNDEFINED:MySQL將自動選擇所要使用的算法 MERGE:將視圖的語句與視圖定義合并起來,使得視圖定義的某一部分取代語句的對應部分 TEMPTABLE:將視圖的結果存入臨時表,然后使用臨時表執行語句 視圖名表示要創建的視圖的名稱 屬性清單表示視圖中的列名,默認與SELECT查詢結果中的列名相同(可選參數) WITH CHECK OPTION表示更新視圖時要保證在該試圖的權限范圍之內(可選參數) CASCADED:更新視圖時要滿足所有相關視圖和表的條件 LOCAL:更新視圖時,要滿足該視圖本身定義的條件即可 tips:創建試圖時最好加上WITH CASCADED CHECK OPTION參數,這種方式比較嚴格 可以保證數據的安全性 視圖操作 在單表上創建視圖 復制代碼 代碼如下: mysql> CREATE VIEW work_view(ID,NAME,ADDR) AS SELECT id,name,address FROM work; Query OK, 0 rows affected (0.05 sec) 此處work_view為視圖名,后面括號內的參數代表視圖中的列 AS表示將后面SELECT 語句中的查詢結果賦給前面的視圖中 在多表上創建視圖 復制代碼 代碼如下: mysql> CREATE ALGORITHM=MERGE VIEW work_view2(ID,NAME,SALARY) -> AS SELECT work.id,name,salary FROM work,salary -> WHERE work.id=salary.id -> WITH LOCAL CHECK OPTION; Query OK, 0 rows affected (0.02 sec) 在多表中創建視圖需要兩表有指定聯系,如上面的work.id=salary.id SELECT查詢視圖 復制代碼 代碼如下: mysql> SELECT * FROM work_view; +----+--------+--------+ | ID | NAME | ADDR | +----+--------+--------+ | 1 | 張三 | 北京 | | 2 | 李四 | 上海 | | 3 | 王五 | 湖南 | | 4 | 趙六 | 重慶 | +----+--------+--------+ rows in set (0.00 sec) 此處的SELECT語句用法和其他表中的用法一樣 別忘了,視圖也是一張表,只不過它是虛擬的 DESCRIBE查看視圖基本信息 復制代碼 代碼如下: mysql> DESCRIBE work_view; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | ID | int(10) | NO | | NULL | | | NAME | varchar(20) | NO | | NULL | | | ADDR | varchar(50) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ rows in set (0.00 sec) 與以往一樣,此處的DESCRIBE可以簡寫為DESC SHOW TABLE STATUS查看視圖基本信息 復制代碼 代碼如下: mysql> SHOW TABLE STATUS LIKE 'work_view'/G *************************** 1. row *************************** Name: work_view Engine: NULL Version: NULL Row_format: NULL Rows: NULL Avg_row_length: NULL Data_length: NULL Max_data_length: NULL Index_length: NULL Data_free: NULL Auto_increment: NULL Create_time: NULL Update_time: NULL Check_time: NULL Collation: NULL Checksum: NULL Create_options: NULL Comment: VIEW row in set (0.00 sec) 此處大部分信息顯示為NULL,更加說明了視圖只是一張虛擬表 如果使用SHOW TABLE STATUS查看一張真實表,結果就不會如此 SHOW CREATE VIEW查看視圖詳細信息 復制代碼 代碼如下