中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL視圖的概念和操作函數有哪些

發布時間:2023-03-09 15:16:19 來源:億速云 閱讀:93 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“MySQL視圖的概念和操作函數有哪些”,內容詳細,步驟清晰,細節處理妥當,希望這篇“MySQL視圖的概念和操作函數有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

常見的數據庫對象

對象描述
表(TABLE)表是存儲數據的邏輯單元,以行和列的形式存在,列就是字段,行就是記錄
數據字典就是系統表,存放數據庫相關信息的表。系統表的數據通常由數據庫系統維護, 程序員通常不應該修改,只可查看
約束 (CONSTRAINT)執行數據校驗的規則,用于保證數據完整性的規則
視圖(VIEW)一個或者多個數據表里的數據的邏輯顯示,視圖并不存儲數據
索引(INDEX)用于提高查詢性能,相當于書的目錄
存儲過程 (PROCEDURE)用于完成一次完整的業務處理,沒有返回值,但可通過傳出參數將多個值傳給調 用環境
存儲函數 (FUNCTION)用于完成一次特定的計算,具有一個返回值
觸發器 (TRIGGER)相當于一個事件監聽器,當數據庫發生特定事件后,觸發器被觸發,完成相應的處理

視圖的概念

視圖是一種 虛擬表 ,本身是 不具有數據 的,占用很少的內存空間,它是 SQL 中的一個重要概念。

視圖建立在已有表的基礎上, 視圖賴以建立的這些表稱為基表。

視圖的創建和刪除只影響視圖本身,不影響對應的基表。但是當對視圖中的數據(DML)進行增加、刪除和 修改操作時,數據表中的數據會相應地發生變化,反之亦然。

視圖提供數據內容的語句為 SELECT 語句, 可以將視圖理解為存儲起來的 SELECT 語句

在數據庫中,視圖不會保存數據,數據真正保存在數據表中。當對視圖中的數據進行增加、刪 除和修改操作時,數據表中的數據會相應地發生變化;反之亦然。

視圖,是向用戶提供基表數據的另一種表現形式。通常情況下,小型項目的數據庫可以不使用視 圖,但是在大型項目中,以及數據表比較復雜的情況下,視圖的價值就凸顯出來了,它可以幫助我 們把經常查詢的結果集放到虛擬表中,提升使用效率。理解和使用起來都非常方便。

創建視圖

查詢語句中字段的別名會作為視圖的別名出現

CREATE VIEW vu_emps
AS 
SELECT employee_id,last_name,salary
FROM emps;
CREATE VIEW vu_emps2(emp_id,name,monthly_sal)
AS 
SELECT employee_id,last_name,salary
FROM emps;

針對多表的視圖創建

CREATE VIEW vu_emp_dept
AS
SELECT employee_id,e.department_id,department_name
FROM emps e JOIN depts d
ON e.department_id = d.department_id;
SELECT * FROM vu_emp_dept;

利用視圖對數據進行格式化

CREATE VIEW vu_emp_dept1
AS
SELECT CONCAT(e.last_name,'(',d.department_name,')') emp_info
FROM emps e JOIN depts d
ON e.department_id = d.department_id;

基于視圖創建視圖

CREATE VIEW vu_emp4
AS 
SELECT department_id,department_name FROM vu_emp_dept;
SELECT * FROM vu_emp4;

查看視圖

查看數據庫的表對象,視圖對象

SHOW TABLES;

查看數據庫結構

DESC vu_emp4;

查看數據的屬性信息

mysql> SHOW TABLE STATUS LIKE 'vu_emp4'\G;
*************************** 1. row ***************************
           Name: vu_emp4
         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
1 row in set (0.00 sec)
ERROR: 
No query specified

查看視圖的詳細定義信息

mysql> SHOW CREATE VIEW vu_emp4\G;
*************************** 1. row ***************************
                View: vu_emp4
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `vu_emp4` AS select `vu_emp_dept`.`department_id` AS `department_id`,`vu_emp_dept`.`department_name` AS `department_name` from `vu_emp_dept`
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)
ERROR: 
No query specified

更新視圖數據

更新視圖中的數據,會導致基表中數據的修改

更新表中的數據,也會導致視圖中的數據的修改

要使視圖可更新,視圖中的行和底層基本表中的行之間必須存在 一對一 的關系。另外當視圖定義出現如下情況時,視圖不支持更新操作:

  • 在定義視圖的時候指定了“ALGORITHM = TEMPTABLE”,視圖將不支持INSERT和DELETE操作;

  • 視圖中不包含基表中所有被定義為非空又未指定默認值的列,視圖將不支持INSERT操作;

  • 在定義視圖的SELECT語句中使用了 JOIN聯合查詢 ,視圖將不支持INSERT和DELETE操作;

  • 在定義視圖的SELECT語句后的字段列表中使用了 數學表達式 或 子查詢 ,視圖將不支持INSERT,也 不支持UPDATE使用了數學表達式、子查詢的字段值;

  • 在定義視圖的SELECT語句后的字段列表中使用 DISTINCT 、 聚合函數 、 GROUP BY 、 HAVING 、 UNION 等,視圖將不支持INSERT、UPDATE、DELETE;

  • 在定義視圖的SELECT語句中包含了子查詢,而子查詢中引用了FROM后面的表,視圖將不支持 INSERT、UPDATE、DELETE;

  • 視圖定義基于一個 不可更新視圖 ; 常量視圖。

雖然可以更新視圖數據,但總的來說,視圖作為虛擬表 ,主要用于方便查詢 ,不建議更新視圖的數據。對視圖數據的更改,都是通過對實際數據表里數據的操作來完成的。

修改視圖

方式1:使用CREATE OR REPLACE VIEW 子句修改視圖

CREATE OR REPLACE VIEW empvu80
(id_number, name, sal, department_id)
AS
SELECT employee_id, first_name || ' ' || last_name, salary, department_id
FROM employees
WHERE department_id = 80;
CREATE OR REPLACE VIEW vu_emp4
AS 
SELECT CONCAT(e.last_name,'(',d.department_name,')') emp_info
FROM emps e JOIN depts d
ON e.department_id = d.department_id;

說明:CREATE VIEW 子句中各列的別名應和子查詢中各列相對應。

方式2:ALTER VIEW

修改視圖的語法是:

ALTER VIEW 視圖名稱
AS
查詢語句

ALTER VIEW vu_emp4
AS 
SELECT CONCAT(e.last_name,'(',d.department_name,')') emp_info
FROM emps e JOIN depts d
ON e.department_id = d.department_id;

刪除視圖

DROP VIEW vu_emp4;
DROP VIEW IF EXISTS vu_emp1;

視圖的優缺點

優點:

  • 操作簡單

  • 減少數據冗余

  • 數據安全

  • 適應靈活多變的需求

  • 能夠分解復雜的查詢邏輯

缺點:

  • 維護成本高

  • 可讀性不好

讀到這里,這篇“MySQL視圖的概念和操作函數有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湖口县| 塔城市| 大悟县| 丰原市| 新建县| 贵港市| 宣恩县| 磴口县| 鹤岗市| 育儿| 锦屏县| 荆州市| 商都县| 望谟县| 新宁县| 巫溪县| 漠河县| 小金县| 沧州市| 金湖县| 南召县| 淅川县| 广汉市| 宜州市| 双柏县| 陇川县| 察哈| 延长县| 普洱| 葫芦岛市| 庄河市| 广灵县| 玉树县| 遵义市| 惠东县| 宁安市| 伊春市| 富宁县| 天长市| 收藏| 汶上县|