- SQL Server 2016 數據庫教程(第4版)
- 鄭阿奇 劉啟芬 顧韻華主編
- 4511字
- 2019-12-20 19:40:42
2.1 SQL Server數據庫
對于SQL Server數據庫,從使用數據庫的角度來說,它是一個邏輯數據庫,只需要知道如何操作它就可以。從數據庫保存角度來說,它是物理數據庫,需要關心包含哪些文件、文件大小、存放位置等。
2.1.1 邏輯數據庫
SQL Server數據庫是存儲數據的容器,是一個由存放數據的表和支持這些數據的存儲、檢索、安全性和完整性的邏輯成分所組成的集合,組成數據庫的邏輯成分稱為數據庫對象。SQL Server的數據庫對象主要包括表、視圖、索引、存儲過程、觸發器和約束等。
1. 數據庫對象
數據庫是一個容器,主要存放數據庫對象。下面先簡單介紹一下SQL Server中所包含的常用數據庫對象。
? 表:表是最主要的數據庫對象。表由行和列組成,因此也稱為二維表。表是存放數據及表示關系的主要形式。
例如,對于學生成績管理系統,學生信息、課程信息和成績信息分別存放在學生表、課程表和成績表中。
? 視圖:視圖是從一個或多個基本表中引用表。由于視圖本身并不存儲實際數據,因此也可以稱之為虛表。當基本表中的數據發生變化時,從視圖中查詢出來的數據也隨之改變。
例如,對于成績表,我們不能直接看出學生姓名、課程名稱等比較直觀的信息,所以,我們可以定義一個學生課程成績視圖,將學生表、課程表與成績表關聯起來,生成一個包含學號、姓名、課程號、課程名和成績的虛表,打開這個表就能看到這些字段在一起的一個表了。
同時,視圖一經定義,就可以像基本表一樣被查詢、修改、刪除和更新了。修改、刪除和更新的內容會反映到基本表中。
? 索引:表中的記錄通常按其輸入的時間順序存放,這種順序稱為記錄的物理順序。為了實現對表記錄的快速查詢,可以對表的記錄按某個或某些字段或它們的組合(稱為索引表達式)進行排序,這種順序稱為邏輯順序。通過邏輯順序搜索索引表達式的值,可以實現對該類數據記錄的快速訪問。
例如,在學生表中,對學號字段進行索引,這樣按學號進行查找對應學生信息記錄時很快就可進行定位。將學號字段指定為“主鍵”,在學生表中就不可能存放相同學號的學生記錄。
? 約束:約束用于保障數據的一致性與完整性。具有代表性的約束就是主鍵和外鍵。主鍵約束當前表記錄的主鍵字段值唯一性,外鍵約束當前表記錄與其他表的關系。
例如,在成績表中,學號作為外鍵與學生表中學號(主鍵)建立關聯,以使成績對應相應的學生。
? 存儲過程:存儲過程是一組為了完成特定功能的SQL語句集合。這個語句集合經過編譯后存儲在數據庫中,存儲過程具有接受(輸入)參數、輸出參數、返回單個或多個值的功能。存儲過程獨立于表存在。
例如,在學生數據庫中,編寫若干條T-SQL語句計算總學分作為存儲過程,可以匯總成績表相應學生的總學分,然后放到學生表相應的學生總學分字段中。學號作為輸入參數時,計算指定學生的總學分;輸入參數為空時,則計算所有學生的總學分。
? 觸發器:觸發器與表緊密關聯。它可以實現更加復雜的數據操作,更加有效地保障數據庫系統中數據的完整性和一致性。觸發器基于一個表創建,但可以對多個表進行操作。
例如,在學生表中沒有學生時,成績表的成績不能輸入。
? 默認值:默認值是在用戶沒有給出具體數據時,系統所自動生成的數值。它是SQL Server系統確保數據一致性和完整性的方法。
例如,在學生表中,學號默認值設置為初始學號,這樣增加記錄時系統預置了一個初始學號,用戶只要修改后面兩位,而不需要輸入所有號。又例如,設置性別默認值為男,這樣增加記錄時只有女學生才需要修改性別字段內容。
? 用戶和角色:用戶是指對數據庫有存取權限的使用者,角色是指一組數據庫用戶的集合。
? 規則:規則用來限制表字段的數據范圍。例如,在學生表中,將出生時間字段設置為當前日期前的16~65年。
? 類型:用戶可以根據需要在給定的系統類型之上定義自己的數據類型。
例如,可以定義系統的邏輯類型為性別類型,這樣我們處理性別數據時可以采用性別類型。
? 函數:用戶可以根據需要將系統若干個語句或者系統函數進行組合實現特定功能,定義成自己的函數。然后,在需要該功能處調用該函數。
2. 數據庫對象的引用
用戶通過數據庫對象對其進行操作,數據庫對象有兩種對象名,即完全限定名和部分限定名。
(1)完全限定名。在SQL Server中,完全限定名是對象的全名,包括4個部分:
服務器名.數據庫名.數據庫架構名.對象名
在SQL Server中,每個對象都屬于一個數據庫架構。數據庫架構是一個獨立于數據庫用戶的非重復命名空間。一般可以將架構視為對象的容器。
(2)部分限定名。在使用T-SQL編程時,使用全名往往很煩瑣且沒有必要,所以常省略全名中的某些部分。對象全名的4個部分中的前3個部分均可以省略。當省略中間的部分時,圓點符“.”不可省略。SQL Server可以根據系統的當前工作環境確定對象名稱中省略的部分。
3. 數據庫中的架構
簡單地說,架構的作用是將數據庫中的所有對象分成不同的集合,每一個集合就稱為一個架構。數據庫中的每一個用戶都會有自己的默認架構。這個默認架構可以在創建數據庫用戶時由創建者設定,若不設定則系統默認架構為dbo。數據庫用戶只能對屬于自己架構中的數據庫對象執行相應的數據操作。至于操作的權限則由數據庫角色決定。
2.1.2 物理數據庫
從數據庫管理員角度看,數據庫是物理數據庫,它存儲邏輯數據庫的各種對象的實體。在創建數據庫時,了解SQL Server如何存儲數據也是很重要的,這有助于規劃分配給數據庫的磁盤容量。
SQL Server所使用的文件包括以下3類文件,通過文件組管理和組織在一起。
1. 數據庫文件
(1)主數據文件。主數據文件簡稱主文件,正如其名字,該文件是數據庫的關鍵文件,包含了數據庫的啟動信息,并且存儲數據。每個數據庫必須有且僅能有一個主文件,其默認擴展名為.mdf。
(2)輔助數據文件。輔助數據文件簡稱輔(助)文件,用于存儲未包括在主文件內的其他數據。輔助文件的默認擴展名為.ndf。輔助文件是可選的,根據具體情況,可以創建多個輔助文件,也可以不使用輔助文件。一般當數據庫很大時,有可能需要創建多個輔助文件。而當數據庫較小時,則只需要創建主文件而不需要創建輔助文件。
(3)日志文件。日志文件用于保存恢復數據庫所需的事務日志信息。每個數據庫至少有一個日志文件,也可以有多個,日志文件的擴展名為.ldf。日志文件的存儲與數據文件不同,它包含一系列記錄,這些記錄的存儲不以頁為存儲單位。
說明
SQL Server允許在創建數據庫時不使用上述的.mdf、.ndf和.ldf作為文件擴展名,但使用默認的擴展名有助于識別文件。
在創建一個數據庫后,該數據庫至少包含上述的主文件和日志文件。這些文件的名字是操作系統文件名,它們不是由用戶直接使用的,而是由系統使用的,不同于數據庫的邏輯名。
2. 數據庫文件組
文件組是由多個文件組成的,為了管理和分配數據而將它們組織在一起。通常可以為一個磁盤驅動器創建一個文件組,然后將特定的表、索引等與該文件組相關聯,那么對這些表的存儲、查詢和修改等操作都在該文件組中。
使用文件組可以提高表中數據的查詢性能。在SQL Server中有兩類文件組。
(1)主文件組。主文件組包含主要數據文件和任何沒有明確指派給其他文件組的其他文件。管理數據庫的系統表的所有頁均分配在主文件組中。
(2)用戶定義文件組。用戶定義文件組是指在CREATE DATABASE或ALTER DATABASE語句中使用FILEGROUP關鍵字指定的文件組。
每個數據庫中都有一個文件組作為默認文件組運行。若在SQL Server中創建表或索引時沒有為其指定文件組,那么將從默認文件組中進行存儲、查詢等操作。用戶可以指定默認文件組,如果沒有指定默認文件組,則主文件組是默認文件組。
說明
若不指定用戶定義文件組,則所有數據文件都包含在主文件組中。
在設計文件和文件組時,一個文件只能屬于一個文件組。只有數據文件才能作為文件組的成員,日志文件不能作為文件組成員。
3. FILESTREAM
借助FILESTREAM,基于SQL Server的應用程序可以將非結構化的數據(如文檔和圖像)存儲在文件系統中。應用程序在利用豐富的流式API和文件系統性能的同時,還可保持非結構化數據和對應的結構化數據之間的事務一致性。
2.1.3 系統數據庫和用戶數據庫
在SQL Server中有兩類數據庫:系統數據庫和用戶數據庫。
系統數據庫存儲有關SQL Server的系統信息,它們是SQL Server管理數據庫的依據。如果系統數據庫遭到破壞,那么SQL Server將不能正常啟動。在安裝SQL Server時,系統將創建4個可見的系統數據庫:master、model、msdb和tempdb。
(1)master數據庫包含了SQL Server的登錄賬號、系統配置、數據庫位置及數據庫錯誤信息等,控制用戶數據庫和SQL Server的運行。
(2)model數據庫為新創建的數據庫提供模板。
(3)msdb數據庫為“SQL Server代理”調度信息和作業記錄提供存儲空間。
(4)tempdb數據庫為臨時表和臨時存儲過程提供存儲空間,所有與系統連接的用戶的臨時表和臨時存儲過程都存儲于該數據庫中。
每個系統數據庫都包含主數據文件和主日志文件。擴展名分別為.mdf和.ldf,如master數據庫的兩個文件分別為master.mdf和master.ldf。
用戶數據庫是用戶創建的數據庫。用戶數據庫與系統數據庫結構相同,文件的擴展名也相同。本書中創建的都是用戶數據庫。
2.1.4 連接SQL Server服務器
1. 連接SQL Server服務器

連接服務器
啟動“Microsoft SQL Server”,系統首先連接SQL Server服務器,如圖2.1所示。

圖2.1 “連接到服務器”對話框
? 服務器類型:可選擇的有數據庫引擎、Analysis Services(分析服務)、報表服務(Reporting Services)、Integration Services(集成服務)。其中,數據庫引擎是SQL Server基本功能,一般用戶僅僅需要使用該功能,默認的選擇類型為數據庫引擎類型。
? 服務器名稱:格式為“計算機名/實例名”,如果在安裝時使用的是默認實例,則使用計算機名作為服務器名稱。當然,使用計算機的IP地址也可以。
如果連接非本機,則選擇<瀏覽更多多…>,系統列出當前局域網上運行的SQL Server服務器的主機名,供選擇。
? 身份驗證:因為在安裝SQL Server 2016時選擇“混合模式(SQL Server身份驗證和Windows身份驗證)”,所以可選擇Windows身份驗證或者SQL Server身份驗證。
選擇Windows身份驗證,采用登錄Windows的用戶連接SQL Server服務器。Windows系統管理員為“Adminstrator”。此時的用戶名為<主機名>\<Windows用戶名>。
選擇SQL Server身份驗證,采用SQL Server系統管理員(sa)和安裝時指定的密碼登錄,如圖2.2所示。用戶也可以采用SQL Server中的注冊用戶及其對應密碼登錄。

圖2.2 SQL Server身份驗證
在Windows采用域模式情況下,還有3種活動目錄(Active Directory)驗證方式。
單擊“連接”,系統進入“SQL Server Management Studio”(簡稱SSMS)窗口,并且默認打開對象資源管理器。系統進入“SQL Server Management Studio(管理員)”窗口,如圖2.3和圖2.4所示。

圖2.3 SQL Server Management Studio(Windows登錄)窗口

圖2.4 SQL Server Management Studio(sa登錄)窗口
其中,DELL(SQL Server 13.0.1742.0-sa)表示當前連接SQL Server服務器,具體表示如下。
DELL:服務器名稱,該名稱就是當前安裝SQL Server 2016計算機的名稱。
SQL Server 13.0.1742.0:SQL Server 2016數據庫引擎版本。
DELL\Administrator:登錄服務器的是當前(DELL)計算機Windows下的Administrator用戶。
2. SSMS環境配置
需要了解對于SSMS環境參數,可在“SSMS”窗口中單擊“工具”主菜單,選擇“選項”子菜單,系統顯示“選項”對話框,如圖2.5所示。

圖2.5 SSMS環境配置
一般用戶不需要特別了解每一項內容的意義,也不需要深究其中的配置。
3. SQL Server 2016服務器屬性
在“SSMS”窗口中,選擇DELL(SQL Server 13.0.1742.0-sa)連接,按右鍵,單擊“服務器屬性”,可以查看當前連接的SQL Server 2016服務器的屬性,包含了若干個選擇頁。
(1)“常規“頁,如圖2.6所示。
其中顯示服務器名稱、安裝的SQL Server 2016企業版、數據庫引擎版本、安裝的目錄等。
(2)在“數據庫設置”頁包含了數據庫文件默認位置,系統顯示默認路徑,該路徑是安裝SQL Server 2016時“數據庫引擎”指定的數據文件路徑,用戶可以在這里進行修改。
(3)單擊左下角“查看連接屬性”,系統顯示“連接屬性”窗口。

圖2.6 “常規”頁