本書是為高等院校應(yīng)用型本科計算機專業(yè)或相關(guān)專業(yè)精心編寫的一本數(shù)據(jù)庫課程教學(xué)用書, 它以SQL Server 2012為核心系統(tǒng), 較完整地論述了數(shù)據(jù)庫系統(tǒng)的基本概念、基本原理和SQL Server的應(yīng)用技術(shù)。
第1章 數(shù)據(jù)庫系統(tǒng)概述 1
1.1 數(shù)據(jù)管理技術(shù)的發(fā)展 1
1.1.1 數(shù)據(jù)和數(shù)據(jù)管理 1
1.1.2 數(shù)據(jù)管理發(fā)展的三個階段 2
1.2 數(shù)據(jù)庫系統(tǒng) 5
1.2.1 數(shù)據(jù)庫系統(tǒng)的組成 5
1.2.2 數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu) 8
1.3 數(shù)據(jù)模型 9
1.3.1 數(shù)據(jù)處理的三個階段 9
1.3.2 常見的數(shù)據(jù)模型 13
1.4 處理大規(guī)模數(shù)據(jù)的數(shù)據(jù)庫 17
1.4.1 分布式數(shù)據(jù)庫 17
1.4.2 并行數(shù)據(jù)庫 20
1.4.3 NoSQL數(shù)據(jù)庫 23
1.4.4 云數(shù)據(jù)庫 25
1.4.5 XML數(shù)據(jù)庫 28
習(xí)題1 30
第2章 關(guān)系型數(shù)據(jù)庫基本理論 31
2.1 關(guān)系數(shù)據(jù)模型 31
2.1.1 關(guān)系數(shù)據(jù)結(jié)構(gòu) 31
2.1.2 關(guān)系運算 35
2.1.3 關(guān)系的完整性約束 36
2.2 關(guān)系代數(shù)基本理論 38
2.2.1 傳統(tǒng)的集合運算 39
2.2.2 專門的關(guān)系運算 42
2.2.3 關(guān)系代數(shù)表達(dá)式及其應(yīng)用實例 46
2.3 關(guān)系數(shù)據(jù)庫的規(guī)范化理論 47
2.3.1 關(guān)系模式規(guī)范化的必要性 47
2.3.2 函數(shù)依賴 49
2.3.3 關(guān)系的范式及規(guī)范化 51
2.3.4 關(guān)系模式的分解 53
習(xí)題2 56
第3章 數(shù)據(jù)庫設(shè)計 59
3.1 數(shù)據(jù)庫設(shè)計概述 59
3.1.1 數(shù)據(jù)庫設(shè)計目標(biāo)和方法 59
3.1.2 數(shù)據(jù)庫設(shè)計的基本步驟 61
3.2 需求分析 62
3.2.1 需求分析的任務(wù)和目標(biāo) 63
3.2.2 需求分析的步驟 63
3.2.3 數(shù)據(jù)流圖 64
3.2.4 數(shù)據(jù)字典 67
3.3 概念結(jié)構(gòu)設(shè)計 68
3.3.1 概念結(jié)構(gòu)設(shè)計任務(wù)和E-R模型的特點 68
3.3.2 概念結(jié)構(gòu)設(shè)計的基本方法 68
3.3.3 概念結(jié)構(gòu)設(shè)計的主要步驟 69
3.3.4 局部E-R模型的設(shè)計 70
3.3.5 全局E-R模型的設(shè)計 77
3.3.6 概念結(jié)構(gòu)設(shè)計實例 81
3.4 邏輯結(jié)構(gòu)設(shè)計 86
3.4.1 E-R模型向關(guān)系模式的轉(zhuǎn)換 86
3.4.2 關(guān)系模式的優(yōu)化 90
3.5 物理結(jié)構(gòu)設(shè)計 93
3.5.1 設(shè)計物理結(jié)構(gòu) 93
3.5.2 評價物理結(jié)構(gòu) 94
3.6 數(shù)據(jù)庫的實施 95
3.7 數(shù)據(jù)庫運行和維護 95
習(xí)題3 96
第4章 SQL Server系統(tǒng)概述 98
4.1 SQL Server系統(tǒng)簡介 98
4.1.1 SQL Server的版本 98
4.1.2 SQL Server系統(tǒng)數(shù)據(jù)庫 99
4.1.3 SQL Server三個關(guān)鍵系統(tǒng)表 99
4.2 Transact-SQL簡介 102
4.2.1 SQL語言的發(fā)展與特點 102
4.2.2 Transact-SQL語法基礎(chǔ) 103
4.3 Transact-SQL流程控制語句 112
4.3.1 BEGIN … END語句 112
4.3.2 分支語句 113
4.3.3 循環(huán)語句 115
4.3.4 RETURN語句 116
4.3.5 WAITFOR語句 117
4.3.6 TRY…CATCH語句 117
4.4 SQL Server存儲機制 118
4.4.1 SQL Server數(shù)據(jù)頁 118
4.4.2 SQL Server數(shù)據(jù)頁類型 119
4.4.3 DBCC命令 120
4.4.4 實例分析 121
習(xí)題4 125
第5章 數(shù)據(jù)庫和數(shù)據(jù)表管理 126
5.1 SQL Server數(shù)據(jù)庫概述 126
5.1.1 數(shù)據(jù)庫文件類型 126
5.1.2 數(shù)據(jù)庫文件組 127
5.2 SQL Server數(shù)據(jù)庫基本管理 127
5.2.1 創(chuàng)建用戶數(shù)據(jù)庫 127
5.2.2 數(shù)據(jù)庫結(jié)構(gòu)的修改 132
5.2.3 數(shù)據(jù)庫文件的更名、刪除 136
5.3 SQL Server數(shù)據(jù)表管理 137
5.3.1 表的創(chuàng)建與維護 137
5.3.2 表中數(shù)據(jù)的維護 146
5.3.3 數(shù)據(jù)表的行列互換輸出 148
習(xí)題5 149
第6章 數(shù)據(jù)查詢與游標(biāo)機制 150
6.1 基本查詢 150
6.1.1 SELECT查詢語句的結(jié)構(gòu) 150
6.1.2 簡單查詢 151
6.1.3 帶有WHERE子句的查詢 154
6.1.4 帶有ORDER BY子句的查詢 156
6.1.5 帶有GROUP BY子句的查詢 157
6.1.6 輸出結(jié)果選項 158
6.1.7 聯(lián)合查詢 159
6.2 多表查詢 160
6.2.1 連接查詢 160
6.2.2 子查詢 164
6.3 游標(biāo)機制 170
6.3.1 游標(biāo)概述 170
6.3.2 游標(biāo)的管理 171
6.3.3 利用游標(biāo)修改和刪除表數(shù)據(jù) 176
習(xí)題6 176
第7章 視圖與索引 178
7.1 視圖 178
7.1.1 視圖的基本概念 178
7.1.2 創(chuàng)建視圖 179
7.1.3 修改視圖 184
7.1.4 刪除視圖 185
7.1.5 使用視圖 185
7.2 索引 187
7.2.1 索引的基本概念 187
7.2.2 創(chuàng)建索引 189
7.2.3 管理索引 192
習(xí)題7 196
第8章 存儲過程、觸發(fā)器和用戶定義函數(shù) 198
8.1 存儲過程 198
8.1.1 存儲過程概述 198
8.1.2 創(chuàng)建存儲過程 200
8.1.3 調(diào)用存儲過程 206
8.1.4 管理存儲過程 207
8.2 觸發(fā)器 210
8.2.1 觸發(fā)器概述 210
8.2.2 創(chuàng)建觸發(fā)器 211
8.2.3 管理觸發(fā)器 217
8.3 用戶定義函數(shù) 219
8.3.1 用戶定義函數(shù)概述 219
8.3.2 創(chuàng)建用戶定義函數(shù) 220
8.3.3 管理用戶定義函數(shù) 223
習(xí)題8 224
第9章 數(shù)據(jù)庫并發(fā)控制 225
9.1 事務(wù) 225
數(shù)據(jù)庫和數(shù)據(jù)表管理
數(shù)據(jù)庫是存放數(shù)據(jù)的容器,在設(shè)計一個應(yīng)用系統(tǒng)時,必須先設(shè)計數(shù)據(jù)庫。數(shù)據(jù)庫中的數(shù)據(jù)及相關(guān)信息通常被存儲在一個或多個磁盤文件(即數(shù)據(jù)庫文件)中,而數(shù)據(jù)庫管理系統(tǒng)為用戶或數(shù)據(jù)庫應(yīng)用程序提供統(tǒng)一的接口來訪問和控制這些數(shù)據(jù),使得用戶不需要直接訪問數(shù)據(jù)庫文件。
數(shù)據(jù)庫中最重要的對象是數(shù)據(jù)表,簡稱表(table),表中存儲了數(shù)據(jù)庫的數(shù)據(jù)。對數(shù)據(jù)庫和表的操作是開發(fā)人員的一項重要工作。
5.1 SQL Server數(shù)據(jù)庫概述
SQL Server 數(shù)據(jù)庫是存放表和視圖、索引、存儲過程和觸發(fā)器等數(shù)據(jù)庫對象的邏輯實體,從邏輯角度組織與管理數(shù)據(jù)。
5.1.1 數(shù)據(jù)庫文件類型
在SQL Server中,數(shù)據(jù)庫是由數(shù)據(jù)文件和事務(wù)日志文件組成的,一個數(shù)據(jù)庫至少應(yīng)包含一個數(shù)據(jù)文件和一個事務(wù)日志文件。包括系統(tǒng)數(shù)據(jù)庫在內(nèi)的每個數(shù)據(jù)庫都有自己的文件集,而且不與其他數(shù)據(jù)庫共享這些文件。SQL Server 數(shù)據(jù)庫具有如下三種類型的文件。
1.主數(shù)據(jù)文件
主數(shù)據(jù)文件是數(shù)據(jù)庫的起點,其中包含數(shù)據(jù)庫的初始信息,記錄數(shù)據(jù)庫所擁有的文件指針。每個數(shù)據(jù)庫有且僅有一個主數(shù)據(jù)文件,這是數(shù)據(jù)庫必需的文件。主數(shù)據(jù)文件的擴展名是.mdf。
2.輔助數(shù)據(jù)文件
除主數(shù)據(jù)文件以外的所有其他數(shù)據(jù)文件都是輔助數(shù)據(jù)文件。輔助數(shù)據(jù)文件存儲主數(shù)據(jù)文件未存儲的所有其他數(shù)據(jù)和對象,它不是數(shù)據(jù)庫必需的文件。當(dāng)一個數(shù)據(jù)庫需要存儲的數(shù)據(jù)量很大(超過了Windows操作系統(tǒng)對單一文件大小的限制)時,可以用輔助數(shù)據(jù)文件來保存主數(shù)據(jù)文件無法存儲的數(shù)據(jù)。輔助數(shù)據(jù)文件可以分散存儲在不同的物理磁盤中,從而可以提高數(shù)據(jù)的讀寫效率。輔助數(shù)據(jù)文件擴展名為.ndf。
3.事務(wù)日志文件
在SQL Server中,每個數(shù)據(jù)庫至少擁有一個自己的日志文件,也可以擁有多個日志文件。日志文件最小是1MB,用來記錄所有事務(wù)以及每個事務(wù)對數(shù)據(jù)庫所做的修改。日志文件的擴展名是.ldf。
在創(chuàng)建數(shù)據(jù)庫的時候,日志文件也會隨之被創(chuàng)建。如果系統(tǒng)出現(xiàn)故障時,常常需要使用事務(wù)日志將數(shù)據(jù)庫恢復(fù)到正常狀態(tài)。這是SQL Server的一個重要的容錯特性,它可以有效地防止數(shù)據(jù)庫的損壞,維護數(shù)據(jù)庫的完整性。
在SQL Server中,用戶還可以指定數(shù)據(jù)文件的大小能夠自動增長。在定義數(shù)據(jù)文件時,指定一個特定的增量,每次擴大文件時均按此增量來增長。另外,每個文件的大小可以指定一個最大值,當(dāng)文件大小達(dá)到最大值時,就不再增長。如果沒有指定文件最大值,文件可以一直增長到磁盤沒有可用空間為止。
5.1.2 數(shù)據(jù)庫文件組
為了有助于數(shù)據(jù)布局和管理任務(wù),SQL Server 允許用戶將多個文件劃分為一個文件集合,這些文件可以在不同的磁盤上,并為這一集合命名,這就是文件組。
文件組是數(shù)據(jù)庫中數(shù)據(jù)文件的邏輯組合,數(shù)據(jù)庫文件組有主文件組、用戶定義文件組和默認(rèn)文件組三類。
1.主文件組
主文件組是包含主要文件的文件組。所有系統(tǒng)表和沒有明確分配給其他文件組的任何文件都被分配到主文件組中,一個數(shù)據(jù)庫只有一個主文件組。
2.用戶定義文件組
用戶定義文件組是用戶首次創(chuàng)建數(shù)據(jù)庫時,或修改數(shù)據(jù)庫時自定義的,其目的是為了將數(shù)據(jù)存儲進行合理的分配,以提高數(shù)據(jù)的讀寫效率。
3.默認(rèn)文件組
每個數(shù)據(jù)庫中均有一個文件組被指定為默認(rèn)文件組。如果在數(shù)據(jù)庫中創(chuàng)建對象時沒有指定對象所屬的文件組,對象將被分配給默認(rèn)文件組。在任何時候,只能將一個文件組指定為默認(rèn)文件組。
關(guān)于默認(rèn)文件組有如下說明:
。1)默認(rèn)文件組中的文件必須足夠大,能夠容納未分配給其他文件組的所有新對象。
。2)如果沒有指定默認(rèn)文件組,則將主文件組作為默認(rèn)文件組。
(3)PRIMARY文件組是默認(rèn)文件組。
5.2 SQL Server數(shù)據(jù)庫基本管理
在SQL Server中,所有類型的數(shù)據(jù)庫管理操作有兩種方式:一是SSMS圖形化界面方式;二是Transact-SQL語句代碼方式。
5.2.1 創(chuàng)建用戶數(shù)據(jù)庫
創(chuàng)建數(shù)據(jù)庫就是為數(shù)據(jù)庫確定名稱、大小、存放位置、文件名和所在文件組的過程。在一個SQL Server實例中,最多可以創(chuàng)建32 767個數(shù)據(jù)庫,數(shù)據(jù)庫的名稱必須滿足系統(tǒng)的標(biāo)識符規(guī)則。在命名數(shù)據(jù)庫時,一定要使數(shù)據(jù)庫名稱簡短并有一定的含義。
例5.1 創(chuàng)建教學(xué)管理數(shù)據(jù)庫JXGL。主數(shù)據(jù)文件邏輯名為JXGL.mdf,保存路徑為D:\ JXGLSYS\DATA,日志文件的邏輯名為JXGL_log.ldf,保存路徑為D:\JXGLSYS\ Data_log。主數(shù)據(jù)文件大小為3MB,文件大小不受限制,增長量為1MB;日志文件的初始大小為1MB,最大為20MB,增長比例為10%。
1.利用SSMS圖形化方式
利用圖形化方法SSMS可以非常方便地創(chuàng)建數(shù)據(jù)庫,尤其對于初學(xué)者來說簡單易用。具體的操作步驟如下:
。1)在SSMS窗口的“對象資源管理器”中展開服務(wù)器,然后選擇“數(shù)據(jù)庫”結(jié)點。
。2)在“數(shù)據(jù)庫”結(jié)點上右擊,從彈出的快捷菜單中選擇“新建數(shù)據(jù)庫”命令,如圖5.1所示。
圖5.1 選擇“新建數(shù)據(jù)庫”命令
(3)執(zhí)行上述操作后,會彈出“新建數(shù)據(jù)庫”對話框,如圖5.2所示。在這個對話框中有三個選項,分別是“常規(guī)”“選項”和“文件組”,默認(rèn)是“常規(guī)”選項。完成這三個選項中的內(nèi)容之后,就完成了數(shù)據(jù)庫的創(chuàng)建工作。
。4)在“數(shù)據(jù)庫名稱”文本框中輸入新建數(shù)據(jù)庫的名稱,例如本例輸入JXGL。
(5)在“所有者”文本框中輸入新建數(shù)據(jù)庫的所有者,如sa。根據(jù)數(shù)據(jù)庫的使用情況,選擇啟用或者禁用“使用全文索引”復(fù)選框。本例中取<默認(rèn)值>。
。6)在圖5.2的“數(shù)據(jù)庫文件”列表中,包括兩行:一行是行數(shù)據(jù)文件,另一行是日志文件。通過單擊下面相應(yīng)的按鈕,可以添加或者刪除相應(yīng)的數(shù)據(jù)文件。該列表中各字段值的含義如下:
邏輯名稱——指定該文件的文件名。
文件類型——用于區(qū)別當(dāng)前文件是數(shù)據(jù)文件還是日志文件。
文件組——顯示當(dāng)前數(shù)據(jù)庫文件所屬的文件組。
初始大小——指定該文件的初始容量,在SQL Server 2012中數(shù)據(jù)文件的默認(rèn)值為5MB,日志文件的默認(rèn)值為2MB。
自動增長——用于設(shè)置在文件的容量不夠用時,文件根據(jù)何種增長方式自動增長。因為本例中日志文件的最大值為20MB,通過單擊“自動增長”列中的JXGL_log省略號按鈕,打開“更改JXGL_Log的自動增長設(shè)置”對話框進行設(shè)置,如圖5.3所示。做日志文件大小修改,本例中設(shè)為20。
圖5.2 “新建數(shù)據(jù)庫”對話框
圖5.3 JXGL_log自動增長設(shè)置修改
路徑——指定存放該文件的目錄。
(7)單擊“選項”選擇頁,設(shè)置數(shù)據(jù)庫的排序規(guī)則、恢復(fù)模式、兼容級別和其他需要設(shè)置的內(nèi)容,如圖5.4所示。
。8)單擊“文件組”選擇頁,可以設(shè)置數(shù)據(jù)庫文件所屬的文件組,還可以通過“添加”或者“刪除”按鈕更改數(shù)據(jù)庫文件所屬的文件組,如圖5.5所示。
。9)完成以上操作后,就可以單擊“確定”按鈕關(guān)閉“新建數(shù)據(jù)庫”對話框。至此,便成功創(chuàng)建了一個數(shù)據(jù)庫。
可以通過“對象資源管理器”窗口查看新建的數(shù)據(jù)庫。
……