【mysql】淺談MYSQL中的基本表、中間表、臨時表、派生表和視圖

簡單介紹
首先我們先了解一下什麼叫虛擬表虛擬表,顧名思義就是就是實際上並不存在(物理上不存在),但是邏輯上存在的表。
在MYSQL中存在三種虛擬表:臨時表、內存表、視圖

1、基本表
基本表是本身獨立存在的表,在SQL中一個關係就對應一個表。

2、中間表
中間表它主要是用來兼容數據,建立映射關係,來兼容新老數據表的數據。一般是在實體之間存在多對多的關係時,我們會創建一箇中間表實體來給它們兩個實體建立起聯繫,時這個中間表實體與其他兩個實體形成一對多的關係,這樣可以有效的降低數據的冗餘。
比如:我們現在有一個學生表和課程表,這兩個實體顯然是一種多對多的關係,這時候我們就可以引入一個學生課程表來將他們聯繫起來,這個表我們可以將學生表和課程表的主鍵作爲它的外鍵,這要學生表和課程表與學生課程表就是一個一對多的關係,簡化了表關係否複雜度。

3、臨時表
臨時表是建立在系統臨時文件夾中的表,如果使用得當,完全可以像普通表一樣進行各種操作。 臨時表的數據和表結構都儲存在內存之中,退出時,其所佔的空間會自動被釋放。
臨時表又分爲外部臨時表和內部臨時表。

1、外部臨時表
通過CREATE TEMPORARY TABLE 創建的臨時表,這種臨時表稱爲外部臨時表。這種臨時表只對當前用戶可見,當前會話結束的時候,該臨時表會自動關閉。這種臨時表的命名與非臨時表可以同名(同名後非臨時表將對當前會話不可見,直到臨時表被刪除)

創建臨時表的兩種方式:

CREATE TEMPORARY TABLE tmp_table (name VARCHAR(10) NOT NULL,    value INTEGER NOT NULL)    
1
CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name
1
2、內部臨時表
內部臨時表是一種特殊輕量級的臨時表,用來進行性能優化。內部臨時表有兩種類型:一種是HEAP臨時表,這種臨時表的所有數據都會存在內存中,對於這種表的操作不需要IO操作。另一種是OnDisk臨時表,顧名思義,這種臨時表會將數據存儲在磁盤上。OnDisk臨時表用來處理中間結果比較大的操作。如果HEAP臨時表存儲的數據大於MAX_HEAP_TABLE_SIZE(詳情請參考MySQL手冊中系統變量部分),HEAP臨時表將會被自動轉換成OnDisk臨時表。OnDisk臨時表在5.7中可以通過INTERNAL_TMP_DISK_STORAGE_ENGINE系統變量選擇使用MyISAM引擎或者InnoDB引擎。

創建內部臨時表

CREATE TEMPORARY TABLE tmp_table (name VARCHAR(10) NOT NULL,    value INTEGER NOT NULL)  TYPE=HEAP
1
4、派生表
派生表是從SELECT語句返回的虛擬表。派生表類似於臨時表,但是在SELECT語句中使用派生表比臨時表簡單得多,因爲它不需要創建臨時表的步驟。
當SELECT語句的FROM子句中使用獨立子查詢時,我們將其稱爲派生表。
與子查詢不同,派生表必須具有別名,以便稍後在查詢中引用其名稱。 如果派生表沒有別名,MySQL將發出錯誤
示例
orders表和orderdetails表中獲得2013年銷售收入最高的前5名產品。

5、視圖
視圖是從一個或幾個基本表導出的表。視圖本身不存在獨立存儲在數據庫中,是一個虛表。即數據庫中只存放視圖的定義而不存放視圖對應的數據,這些數據仍然存放在導出視圖的基本表中。視圖在概念上基本與表等同。視圖在概念上與基本表等同,用戶可以在基本表那樣使用視圖,可以在視圖上再定義視圖。
如何創建視圖

create view view_name as
# 這裏寫SQL語句
————————————————
版權聲明:本文爲CSDN博主「SunBairn」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_44863976/article/details/102789392

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章