看完上面四本書,並領悟了其中的精髓,就可以不用往下看了。
學習自:數據庫系統
1 數據庫系統
數據庫(DB:Database):相互之間有關聯關係的數據的集合。
數據庫管理系統(DBMS:Database Management System):管理數據庫的一種系統軟件。如:MySQL,Oracle。
數據庫應用(DBAP:Database Application)
數據庫管理員(DBA:Database Administrator)
計算機基本系統
上面五個東西構成了數據庫系統
2 數據庫管理系統
我們平時接觸的 MySQL,Oracle 等,實質上是數據庫管理系統,而不是數據庫。
2.1 SQL(Structured Ouery Language)
SQL 是集 DDL,DML 和 DCL 於一體的數據庫語言。用戶通過 SQL 指揮 DBMS 去操作數據庫。
DDL 語句引導詞:Create, Alter, Drop
DML 語句引導詞:Insert,Delete,Update,Select
DCL 語句引導詞:Grant(授權),Revoke(撤銷授權)
2.2 從用戶角度看 DBMS
2.2.1 數據庫定義語言 DDL
DBMS 提供一套數據定義語言(DDL:Data Definition Language)給用戶,用戶使用 DDL 描述其所要建立表的格式,然後 DBMS 依照用戶的定義創建數據庫和 Table。
2.2.2 數據庫操縱語言 DML
DBMS 提供一套數據操縱語言(DML:Data Manipulation Language) 給用戶,用戶使用 DML 描述其所要進行的增刪查改操作,然後 DBMS 依照用戶的描述去執行。
2.2.3 數據庫控制語言 DCL
DBMS 提供一套數據控制語言(DCL:Data Control Language) 給用戶,用戶使用 DCL 描述其對數據庫所要實施的控制,然後 DBMS 依照用戶的描述去進行控制。如控制哪些用戶對哪些數據有訪問權限。
2.3 從系統角度看 DBMS
DBMS 負責解析數據庫語言,然後執行。
數據實質上是存儲在磁盤上的,而 CPU 只能直接訪問內存,所以數據要先讀入到內存。
語言編譯器:將數據庫語言書寫的內容,翻譯成 DBMS 可執行的命令。
查詢優化(執行引擎)與查詢實現(基本命令的不同執行算法):提高數據庫檢索速度。
數據存取與索引:提高數據在磁盤上的高效存取。
事務管理:提高可靠性,避免併發操作錯誤。
故障恢復:提供備份,日誌等適用程序,使數據庫自動恢復到故障發生前正確的狀態。
安全性控制:提供合法校驗,避免用戶非法訪問數據庫。
......
4 MySQL 數據類型與長度
4.1 數值類型
類型 | 大小 | 範圍(有符號) | 範圍(無符號) | 用途 |
---|---|---|---|---|
TINYINT(M) | 1 字節 | (-128,127) | (0,255) | 小整數值 |
SMALLINT(M) | 2 字節 | (-32 768,32 767) | (0,65 535) | 大整數值 |
MEDIUMINT(M) | 3 字節 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整數值 |
INT或INTEGER(M) | 4 字節 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整數值 |
BIGINT(M) | 8 字節 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 極大整數值 |
M 表示最大顯示寬度,顯示寬度與可存儲的值範圍無關。將來的 MySQL 版本中將刪除對它的支持。
如:
int(11) 顯示結果爲00000000001
int(3) 顯示結果爲001字節都是佔 4 個字節,所以在設計時直接 int 就行不用設置長度。
4.2 字符串類型
類型 | 大小 | 用途 |
---|---|---|
CHAR(M) | 0-255字節 | 定長字符串 |
VARCHAR(M) | 0-65535 字節 | 可變長字符串 |
M 表示要存儲的最大字符數。
如:
CHAR(30):
最多可容納30個字符
5 數據庫物理存儲
5.1 存儲層次結構
數據庫的數據實質存儲在 Disk 中,CPU 通過 I/O 接口把數據從 Disk 讀入內存,然後進行運算處理。
5.2 DRAM(Dynamic Random Access Memory,作爲主存)
DRAM 是與 CPU 直接交換數據的內部存儲器。它可以隨時讀寫,速度快,通常作爲操作系統或其他正在運行中的程序的臨時數據存儲媒介。
5.2.1 DRAM 芯片的內部結構
基本存儲單元
DRAM 每隔一段時間,要刷新充電一次,否則內部的數據即會消失。
5.2.2 DRAM 的特點和主要用途
現代 PC 機大多采用 DRAM 作爲主存,例如:SDRAM,DDR4,SDRAM
5.3 SRAM(Static Random-Access Memory,在 CPU 裏)
SRAM不需要刷新電路即能保存它內部存儲的數據
5.3.1 SRAM 的基本存儲單元
由 6 個晶體管組成,導致價格貴
5.3.2 SRAM 的特點
5.4 磁盤管理
老式磁盤是由一個個盤片組成。
5.4.1 磁盤整體結構
5.4.2 磁盤盤片結構
每個盤片的盤面被劃分成多個狹窄的同心圓環,數據就存儲在這樣的同心圓環上面,我們將這樣的圓環稱爲磁道 (Track)。最外圈的磁道是0號磁道,向圓心增長依次爲1磁道、2磁道…磁盤的數據存放就是從最外圈開始的。
把每個磁道劃分爲若干個弧段,每個弧段就是一個扇區 (Sector)。扇區是硬盤上存儲的物理單位,也是操作系統和塊設備(硬件、磁盤)之間傳送數據的單位。現在每個扇區可存儲 512 字節數據已經成了業界的約定。即使計算機只需要某一個字節的數據,但也得把這個 512 個字節的數據全部讀入內存,再選擇所需要的那個字節。
硬盤容量 = 盤面數 × 柱面數 × 扇區數 × 512字節
磁盤塊/簇(block/cluster)是操作系統虛擬出來的一個概念,是其與磁盤打交道的最小單位。一個磁盤塊由一個或多個連續的扇區組成。
5.4.3 操作系統管理磁盤數據
學習自:操作系統原理
操作系統的本質是一個系統軟件,是一些程序模塊的集合。而操作系統中負責管理和存儲文件信息的程序模塊稱爲文件管理系統,簡稱文件系統。文件系統把數據劃分成一個個文件,然後把每個文件拆分成若干磁盤塊,保存在若干個扇區裏。
文件被劃分成 N 塊,這 N 塊在磁盤上怎麼存放?
(1) 順序結構
FCB 登場!
FCB(File Control Block:文件控制塊):用來保存管理文件的有關信息,如文件名,文件大小,文件地址......這些信息最終會存在某個物理塊對應的扇區裏。每個文件都會對應一個 FCB,採用順序結構存放文件時,會在 FCB 中記錄文件第一塊物理塊的塊號和物理塊的數目。
(2) 鏈接結構
FCB 中記錄第一塊物理塊的塊號
FAT 文件分配表
FAT用來記錄文件所存放每個扇區的信息
(3) 索引結構
文件系統爲每個文件建立一個索引表,用來記錄該文件所有物理塊的塊號。然後,在 FCB 中記錄該索引表的地址信息。索引表的存放在某個物理塊對應的扇區裏。
5.5 內存管理
程序通常以可執行文件格式保存在磁盤上,程序啓動時會被抽象成操作系統的一個進程加載到內存。每個進程具有獨立的內存地址空間。
怎樣爲進程分配內存空間呢?
(1) 固定分區
把內存空間分割成若干分區,大小不一,分完就固定不變,每個分區裝一個且只能裝一個進程。
(2) 可變分區
(3) 頁式存儲
用戶進程地址空間被劃分成大小相等的部分,稱爲 頁,從 0 開始編號。
內存空間按同樣大小劃分成大小相等的區域,稱爲 頁框,從 0 開始編號。
以頁爲單位進行分配,並按進程需要的頁數來分配;邏輯上相鄰的頁,物理上不一定相鄰。
(4) 段式存儲
用戶進程地址空間:按程序自身的邏輯關係劃分爲若干個程序段。
內存空間:被動態劃分爲若干長度不相同的區域,成爲物理段,每段在內存中佔據連續空間,但各段之間可以不相鄰。
5.6 查詢實現的基本思想
5.6.1 數據存儲的映射關係
5.6.2 基本存儲與查詢實現的基本框架
5.7 記錄與表在磁盤上的存儲
5.7.1 總體框架圖
5.7.2 數據庫記錄在磁盤上的存儲
(1)定長記錄(按長度區分)
每條記錄佔用的字節數相同,靠分隔符區分開始與結束,再去區分每個屬性值。
(2)變長記錄(按指針區分)
每條記錄佔用不同的字節
(3)典型的磁盤塊例子
(4)記錄非跨塊存儲
磁盤塊剩餘的空間不夠存放一條記錄時,有錢任性,換一塊存。但是要有底線,最大可以浪費多大的空間是個嚴肅的問題。
(5)記錄跨塊存儲(靠指針連接)
一條記錄被拆分成多個磁盤塊去存儲
5.8 數據組織與存儲
文件組織(File Organization):將數據組織成記錄,塊和訪問結構的方式,包括把記錄和塊存儲在磁盤上的方式,以及記錄與塊之間相互聯繫的方法。
存儲方法(Access Method):對文件所採取的存取操作方法
5.8.1 無序記錄文件(堆文件Heap)
記錄可存儲於任意有空間的位置,磁盤上存儲的記錄是無序的,更新效率高,但檢索效率可能低。
法 1:
新記錄總是插入到文件尾部,刪除記錄時,直接刪除該記錄所在位置的內容,也可以在該記錄前標記 “刪除標記”
法 2:
新增記錄先利用那些標記爲 “刪除標記” 的記錄空間
頻繁刪增記錄會造成空間浪費,需要週期性重新組織數據庫
數據庫重組(Reorganization):移走被刪除的記錄,有效記錄往前移動。
5.8.2 有序文件組織(排序文件Sequential)