數據庫技術叢書:SQL Server 2016 從入門到實戰(視頻教學版) PDF




1:書籍下載方式:

image

SQL Server2016從入門到實戰 PDF 下載

 
鏈接:https://pan.baidu.com/s/1sWZjdud4RosPyg8sUBaqsQ 密碼:8z7w

學習視頻:https://pan.baidu.comjsjlclBYKtq (密碼: pjeb )

image


本書詳細講解了SQL Server 2016數據庫的基本概念、安裝和卸載、創建數據庫、操作數據表和視圖、T-SQL語言、數據查詢、數據操作、存儲過程、觸發器、索引、游標、SQL函數、事務、性能優化等內容,還講解了大數據功能和數據庫性能提升問題。讀者通過本書的學習可以較為全面地掌握SQL Server 2016數據庫管理、開發的方法和技巧。

作者簡介

作者:孫亞南

孫亞南,多年數據庫研發與教學經驗。

目錄

第1章 數據庫入門 1

數據庫是依照某種數據模型組織起來並存放在二級存儲器中的數據集合, 可以將其視為電 子化的文件櫃。數據庫具有不重復、以最優方式提供多種應用服務、數據結構獨立於應用程序、 對數據的操作由統一軟件進行管理和控制等特點。從數據管理技術的發展歷程來看, 數據庫是 由文件管理系統發展起來的, 是數據管理的高級階段。
本章重點內容:
• 了解數據庫的發展與組成
• 掌握數據庫體系結構
• 掌握數據庫的數據模型
• 了解常見的數據庫


1.1 數據庫系統概述


      數據庫(DataBase , DB ) 是按照數據結構來組織、存儲和管理數據的倉庫, 產生於距今 60 多年前. 隨着信息技術和市場的發展,特別是20 世紀90 年代以后,數據管理不再僅僅 用於存儲和管理數據, 出現了用戶所需要的各種數據管理的方式。從簡單的存儲各種數據的 表格到能夠進行海藍數據存儲的大型數據庫系統都屬於數據庫的范疇, 並在各個方面得到了 廣泛的應用。
      在信息化社會充分有效地管理和利用各類信息資源是進行科學研究和決策管理的前提條 件。數據庫技術是管理信息系統、辦公自動化系統、決策支持系統等各類信息系統的核心部分, 是進行科學研究和決策管理的重要技術手段。


1.1.1 數據庫技術的發展

使用計算機后,隨着數據處理瑩的增長,產生了數據管理技術。數據管理技術的發展與計算機 硬件(主要是外部存儲器〉、系統軟件及計算機應用的范圍有着密切的聯系。數據管理技術的發展 經歷了4 個階段:人工管理階段、文件系統階段、數據庫階段和高級數據庫技術階段。其中,數據 庫階段和高級數據庫技術階段可以統稱為系統階段,即由數據庫系統進行管理數據的階段。

1 . 人工管理


20 世紀50 年代中期之前, 計算機的軟硬件均不完善。硬件存儲設備只有磁帶、卡片和紙帶,軟件方面還沒有操作系統,當時的計算機主要用於科學計算。人工管理階段由於還沒有軟 件系統對數據進行管理,程序員在程序中不僅要規定數據的邏輯結構,還要設計其物理結構, 包括存儲結構、存取方法、輸入輸出方式等。當數據的物理組織或存儲設備改變時,用戶程序 就必須重新編制。由於數據的組織面向應用, 不同的計算程序之間不能共享數據, 使得不同的 應用之間存在大量的重復數據,很難維護應用程序之間數據的一致性。這一階段的主要特征可
歸納為如下幾點:
• 計算機中沒有支持數據管理的軟件.
• 數據組織面向應用,數據不能共享,數據重復。
• 在程序中要規定數據的邏輯結構和物理結構,數據與程序不獨立.
• 數據處理方式一--批處理。

2 . 文件系統


這一階段處於20 世紀50 年代中期到60 年代中期,其主要標志是計算機中有了專門管理 數據庫的軟件一←操作系統。操作系統文件管理功能的出現標志着數據管理步入一個新的 階段。
在文件系統階段,數據以文件為單位存儲在外存,由操作系統統一管理,而操作系統為用 戶使用文件提供友好界面。該階段中的文件邏輯結構與物理結構脫鈎,程序和數據分離,使數 據與程序有了一定的獨立性。用戶的程序與數據可分別存放在外存儲器上,各個應用程序可以 共享一組數據,實現了以文件為單位的數據共享。
由於數據的組織仍然是面向程序的,因此仍存在大量的數據冗余。同時,由於數據的邏輯 結構不能方便地修改和擴充,因此數據邏輯結構的每一點微小改變都會影響應用程序。此外, 由於文件之間互相獨立,因此不能反映現實世界中事物之間的聯系,而操作系統不負責維護文 件之間的聯系信息。如果文件之間有內容上的聯系,那么只能由應用程序去處理,這加大了程 序設計人員的工作量。

3 . 系統階段


      20 世紀60 年代后,隨着計算機在數據管理領域的普遍應用,人們對數據管理技術提出了 更高的要求:希望面向企業或部門,以數據為中心組織數據,減少數據的冗余,提供更高的數 據共享能力,同時要求程序和數據具有較高的獨立性,當數據的邏輯結構改變時,不涉及數據 的物理結構,也不影響應用程序,以降低應用程序研制與維護的費用。數據庫技術正是在這樣 的應用需求基礎上發展起來的。 數據管理技術經歷了人工管理階段和文件階段后,獲得了大量的技術積累,這為數據庫的
誕生奠定了基礎。具體來說,數據庫技術有如下特點:
(1)面向企業或部門。數據庫以數據為中心進行數據的組織, 形成綜合性的數據庫,從 而為各應用共享。
(2) 采用一定的數據模型。數據模型不僅描述了數據本身的特點,而且描述了數據之間 的聯系。

(3)數據冗余小,易修改、易擴充。數據庫技術階段中,不同的應用程序根據處理要求 從數據庫中獲取需要的數據, 這樣就減少了數據的重復存儲,也便於增加新的數據結構,便於 維護數據的一致性。
( 4) 程序和數據有較高的獨立性。
( 5 ) 具有良好的用戶接口,用戶可方便地開發和使用數據庫。
( 6 ) 對數據進行統一管理和控制,提供了數據的安全性、完整性以及並發控制。
數據管理技術從文件系統發展到數據庫系統,這在信息領域中具有里程碑的意義。在文件 系統階段,人們在信息處理中關注的中心問題是系統功能的設計,因此程序設計占主導地位; 而在數據庫階段,數據開始占據了中心位置, 數據的結構設計成為信息系統首先關心的問題, 而應用程序則以既定的數據結構為基礎進行設計。


4. 發展趨勢


隨着信息管理內容的不斷擴展, 出現了豐富多樣的數據模型(層次模型、網狀模型、關系 模型、面向對象模型、半結構化模型等) ,新技術也層出不窮(數據流、Web 數據管理、數 據挖掘等)。每隔幾年, 國際上一些資深的數據庫專家就會聚集一堂,探討數據庫現狀、研究 存在的問題和未來需要關注的新技術焦點。
數據庫與學科技術的結合將會建立一系列新數據庫,如分布式數據庫、並行數據庫、知識 庫、多媒體數據庫等,這將是數據庫技術重要的發展方向。未來數據庫技術及市場發展的兩大 方向是數據倉庫和電子商務,數據管理技術將在數據倉庫技術以及與之相關的數據挖掘和知識 發現領域持續發展。


1.1.2 數據庫系統組成

          數據庫系統( Database System, DBS ) 是指一個具體的數據庫管理系統軟件和用它建立起 來的數據庫,通常由系統軟件、數據庫和數據管理員組成。系統軟件主要包括操作系統、各種 宿主語言、實用程序以及數據庫管理系統( DBMS ) ;數據庫由數據庫管理系統統一管理,數 據的插入、修改和檢索均要通過數據庫管理系統進行;數據管理員( DBA ) 負責創建、監控 和維護整個數據庫,使數據能被任何有權使用的人有效使用,數據庫管理員一般由業務水平較
高、資歷較深的人員擔任。
數據庫系統是軟件研究領域的一個重要分支,常稱為數據庫領域。數據庫系統是為適應數 據處理的需要而發展起來的一種較為理想的數據處理的核心機構, 具體來說由如下部分組成。
(1)數據庫:長期存儲在計算機內,有組織、可共享的數據集合。數據庫中的數據按一 定的數學模型組織、描述和存儲,具有較小的冗余、較高的數據獨立性和易擴展性, 並可為各 種用戶共享。
(2) 硬件:構成計算機系統的各種物理設備,包括存儲所需的外部設備,如物理硬盤、 光盤等媒介。

(3)系統軟件:包括操作系統、數據庫管理系統及應用程序。數據庫管理系統( DataBase Management Sys能m , DBMS ) 是數據庫系統的核心軟件,在操作系統的支持下工作,是科學 地組織和存儲數據、高效獲取和維護數據的系統軟件。其主要功能包括數據定義、數據操縱、 數據庫的運行管理和數據庫的建立與維護。
(4) 人員:主要包括如下4 類。
• 第一類為系統分析員和數據庫設計人員。系統分析員負責應用系統的需求分析和規范 說明,他們和用戶及數據庫管理員一起確定系統的硬件配直,並參與數據庫系統的概 要設計。數據庫設計人員負責數據庫中數據的確定、數據庫各級模式的設計.
• 第二類為應用程序員,負責編寫使用數據庫的應用程序。這些應用程序可對數據進行 檢索、建立、刪除或修改.
• 第三類為最終用戶,他們利用系統的接口或查詢語言訪問數據庫。
• 第四類是數據庫管理員( Data Base Administrator, DBA) ,負責數據庫的總體信息 控制。DBA 的具體職責包括確定數據庫中的信息內容和結構,決定數據庫的存儲結 構和存取策略,定義數據庫的安全性要求和完整性約束條件,監控數據庫的使用和運 行,負責數據庫的性能改進、數據庫的重組和重構,以提高系統的性能.


1.2 數據庫體系結構


人們為數據庫設計了一個嚴謹的體系結構, 數據庫領域公認的標准結構是三級模式結構, 包括外模式、概念模式和內模式。數據庫體系結構能夠有效組織、管理數據,提高數據庫的邏 輯獨立性和物理獨立性。


1.2.1 什么是模式

雖然實際的數據庫管理系統產品種類很多,支持不同的數據模式,使用不同的數據庫語言, 建立在不同的操作系統之上,數據的存儲結構也各不相同, 但它們在體系結構上通常具有相同 的特征, 即采用三級模式結構並提供兩級映像功能。
模式是數據庫中全體數據的邏輯結構和特征的描述, 僅僅涉及型的描述, 不涉及具體的值。
模式的一個具體值稱為一個實例,同一個模式可以有很多實例。模式是相對穩定的,而實例是 相對變動的,因為數據庫中的數據是在不斷更新的。模式反映的是數據的結構及其聯系,而實 例反映的是數據庫某一時刻的狀態。


1.2.2 三級模式結構

    美國國家標准協會(Arnerican National Standard Institute. ANSI)的數據庫管理系統研究 小組於1978 年提出了標准化的建議,將數據庫結構分為3 級: 面向用戶或應用程序員的用戶 級、面向建立和維護數據庫人員的概念級、面向系統程序員的物理級。
    其中, 用戶級對應外模式, 概念級對應概念模式, 物理級對應內模式,不同級別的用戶對 數據庫形成不同的視圖。所謂視圖,就是指觀察、認識和理解數據的范圍、角度和方法,是數 據庫在用戶眼中的反映。很顯然,不同層次(級別〉的用戶所看到的數據庫是不同的。數據庫 系統結構層次如圖1.1所示。


                                                        image


1. 分類
(1)外模式
外模式又稱子模式或用戶模式, 對應用戶級。它是某個或某幾個用戶所看到的數據庫的數 據視圖, 是與某一應用有關的數據的邏輯表示。外模式是從模式導出的一個子集,包含模式中 允許特定用戶使用的那部分數據。用戶可以通過外模式描述語言來描述、定義對應用戶的數據 記錄(外模式) .也可以利用數據操縱語言( Data Manipulation Language. D~在L) 對這些數據 記錄進行操作。總的來說,外模式反映了數據庫的用戶觀。

image

(2) 概念模式
模式又稱概念模式或邏輯模式,對應概念級。它是由數據庫設計者綜合所有用戶的數據, 按照統一的觀點構造的全局邏輯結構, 是對數據庫中全部數據的邏輯結構和特征的總體描述, 是所有用戶的公共數據視圖(全局視圖)。它是由數據庫管理系統提供的數據模式描述語言 (Data Description Language. DDL) 來描述、定義的,體現、反映了數據庫系統的整體現。


(3)內模式
內模式又稱存儲模式, 對應物理級。它是數據庫中全體數據的內部表示或底層描述,是數據庫最低一級的邏輯描述,它描述了數據在存儲介質上的存儲方式和物理結構,對應着實際存 儲在外存儲介質上的數據庫。
在一個數據庫系統中只有唯一的數據庫,因而作為定義、描述數據庫存儲結構的內模式和 定義、描述數據庫邏輯結構的模式也是唯一的, 但建立在數據庫系統之上的應用則是非常廣泛、 多樣的, 所以對應的外模式不是唯一的,也不可能是唯一的。

2. 工作原理
       數據庫的三級模式是數據庫在3 個級別(層次)上的抽象,使用戶能夠邏輯地、抽象地處 理數據而不必關心數據在計算機中的物理表示和存儲。實際上,對於一個數據庫系統而言,物 理級數據庫是客觀存在的,是進行數據庫操作的基礎;概念級數據庫不過是物理數據庫的一種 邏輯、抽象的描述(模式) ;用戶級數據庫則是用戶與數據庫的接口,是概念級數據庫的一個 子集(外模式〉。
       用戶應用程序根據外模式進行數據操作,通過外模式一模式映射定義和建立某個外模式與 模式間的對應關系,將外模式與模式聯系起來,當模式發生改變時, 只要改變其映射,就可以 使外模式保持不變,對應的應用程序也保持不變;另一方面,通過模式一內模式映射定義建立 數據的邏輯結構(模式〉與存儲結構(內模式)間的對應關系,當數據的存儲結構發生變化時, 只需改變模式一內模式映射,就能保持模式不變,因此應用程序也可以保持不變。



1.3 數據模型

       數據模型( Data Model ) 是數據特征的抽象,是數據庫管理的教學形式框架,也是數據庫 系統中用以提供信息表示和操作手段的形式架構。數據模型包括數據庫數據的結構部分、數據 庫數據的操作部分和數據庫數據的約束條件。數據模型描述了在數據庫中結構化和操縱數據的 方法,模型的結構部分規定了數據如何被描述。


1.3.1 數據模型的分類

1. 組成部分


數據模型所描述的內容包括3 部分:數據結構、數據操作和數據約束。
(1)數據結構:數據模型中的數據結構主要描述數據的類型、內容、性質以及數據間的 聯系等。數據結構是數據模型的基礎,數據操作和約束都基本建立在數據結構上。
不同的數據結構具有不同的操作和約束。
(2) 數據操作:數據模型中的數據操作主要描述在相應數據結構上的操作類型和操作方式。
(3)數據約束:數據模型中的數據約束主要描述數據結構內數據間的語法、詞義聯系、 它們之間的制約和依存關系以及數據動態變化的規則,以保證數據的正確、有效和相容。


2. 分類


數據模型的研究包括以下3 方面:

(1)概念數據模型


      這是面向數據庫用戶的現實世界的數據模型,主要用來描述世界的概念化結構,可以便數 據庫的設計人員在設計的初始階段擺脫計算機系統及數據庫管理系統的具體技術問題, 集中精 力分析數據以及數據之間的聯系等。概念數據模型與具體的數據庫管理系統無關。需要注意的 是,概念數據模型必須換成邏輯數據模型才能在數據庫管理系統中實現。

(2) 邏輯數據模型


      這是用戶在數據庫中看到的數據模型,是具體的數據庫管理系統所支持的數據模型,主要 有網狀數據模型、層次數據模型和關系數據模型3 種類型。此模型既要面向用戶,又要面向系 統,主要用於數據庫管理系統的實現。

(3)物理數據模型


         這是描述數據在存儲介質上的組織結構的數據模型,不僅與具體的數據庫管理系統有關, 還與操作系統和硬件有關。每一種邏輯數據模型在實現時都有與其相對應的物理數據模型。數 據庫管理系統為了保證其獨立性與可移植性, 將大部分物理數據模型的實現工作交由系統自動 完成,而設計者只設計索引、聚集等特殊結構。
         數據庫的類型是根據數據模型來划分的, 而任何一個DBMS 也是根據數據模型有針對性 地設計出來的,這就意味着必須把數據庫組織成符合DBMS 規定的數據模型。目前成熟地應 用在數據庫系統中的數據模型有層次模型、網狀模型和關系模型。它們之間的根本區別在於數 據之間聯系的表示方式不同(記錄型之間的聯系方式不同)。層次模型以"樹結構"表示數據 之間的聯系。網狀模型以"圖結構"來表示數據之間的聯系。關系模型是用"二維表" (或稱 為關系)來表示數據之間的聯系的。


1.3.2 E—R模型

E-R 方法是"實體.聯系方法" (Entity-Relationship Approach) 的簡稱,是描述現實世界 概念結構模型的有效方法。巴R 方法是表示概念模型的一種方式,用矩形表示實體型,在矩形 框內寫明實體名;用橢圓表示實體的屬性,並用無向邊將其與相應的實體型連接起來;用菱形 表示實體型之間的聯系,在菱形框內寫明聯系名,並用無向邊分別與有關實體型連接起來,同 時在無向邊旁標上聯系的類型(1 :1 、l:n 或m:n) 。用巳R 方法描述的數據模型即為E-R 模型, 也稱為E-R 圖。圖1.2 所示為一個簡單學生管理系統的數據庫E-R 模型圖。

                                                                        image



1. E-R 圄成分


在E-R 圖中,有如下4 個成分。
• 矩形框:表示實體,在框中記入實體名.
• 菱形框:表示聯系,在框中記入聯系名。
• 橢圓形框:表示實體或聯系的屬性,將屬性名記入框中.對於主屬性名,則在其名稱 下加一下划線.
• 連線:實體與屬性之間、實體與聯系之間、聯系與屬性之間用直線相連,並在直線上 標注聯系的類型。

2. 相圖要素


構成E-R 圖的基本要素是實體型、屬性和聯系,其表示方法如下。
(1)實體型( Entity) : 有相同屬性的實體具有相同的特征和性質,用實體名及其屬性名 集合來抽象和刻畫同類實體,在E-R 圖中用矩形表示, 在矩形框內寫明實體名。例如,學生 張三豐、學生李尋歡都是實體。
(2) 屬性(Attribute) : 實體所具有的某一特性,一個實體可由若干個屬性來刻畫。屬 性在E-R 圖中用橢圓形表示, 並用無向邊將其與相應的實體連接起來。例如, 學生的姓名、 學號、性別都是屬性。
如果是多值屬性,就在橢圓形外面再套實線橢圓。如果是派生屬性,就用虛線橢圓表示。
(3)聯系( Relationship) : 也稱關系,用於在信息世界中反映實體內部或實體之間的聯 系。聯系包括實體內的聯系和實體間的聯系兩種, 實體內部的聯系通常是指組成實體的各屬性 之間的聯系, 實體之間的聯系通常是指不同實體集之間的聯系。聯系在E-R 圖中用菱形表示,
在菱形框內寫明聯系名, 並用無向邊分別與有關實體連接起來, 同時在無向邊旁標上聯系的類型 (1 : 1 、1: n 或m :n) 。例如, 老師給學生授課存在授課關系, 學生選課存在選課關系。

        需要注意的是,聯系也可能有屬性。例如,學生" 學"某門課程所取得的成績,既不是學 生的屬性也不是課程的屬性。由於"成績"既依賴於某名特定的學生又依賴於某門特定的課程, 因此它是學生與課程之間的聯系"學"的屬性。一般來說,聯系可分為以下3 種類型:

(1)一對一聯系(1 : 1)


例如,一個部門有一個經理,而每個經理只在一個部門任職,則部門與經理的聯系是一對 一的。

(2) 一對多聯系(1 : n)


例如,某校教師與課程之間存在一對多的聯系"教",即每個教師可以教多門課程,但是 每門課程只能由一個教師來教。

(3)多對多聯系(m: n)


例如,圖1.2 表示學生與課程間的聯系( "學" )是多對多的,即一個學生可以學多門課 程,每門課程也可以有多個學生來學。


3. 設計步驟


一般來說,用戶在設計數據庫之前需要先設計E-R 模型,而E-R 模型用E-R 圖來表示, 其設計分為3 個步驟:調查分析、合並生成和修改重構。
(1)調查分析
在需求分析階段,通過對應用環境和要求進行詳盡的調查分析,用多層數據流圖和數據字 典描述整個系統, 逐一設計分E-R 圖每個局部應用對應的數據流圖,同時將局部應用涉及的 數據都收集在數據字典中。
(2) 合並生成
由於實體之間的聯系在不同局部視圖中呈現不同的類型,因此用戶需要設計多個針對 局部應用的E-R 圖。合並生成步驟是將多個局部E-R 圖的實體、屬性和聯系合並,從而生 成整體的E-R 圖。

(3)修改重構
經合並生成后的基本E-R 圖可能存在冗余的數據和冗余的實體間聯系,即存在可由基本 數據導出的數據和由其他聯系導出的聯系。冗余數據和冗余聯系容易破壞數據庫的完整性,給 數據庫維護增加困難。
因此,得到基本E-R 圖后,還應當進一步檢查E-R 圖中是否存在冗余,如果存在,應設 法予以消除。修改重構步驟主要采用分析方法來消除基本E-R 圖中的冗余,也可以用規范化 理論來消除冗余。





1.3.3 層次模型

當前數據庫領域常用的數據模型主要有3 種:層次模型、網狀模型和關系模型。其中,層 次模型和網狀模型統稱非關系模型,如圖1.3 所示。

                              image


1. 層次模型定義


     現實世界中許多實體之間的聯系本來就呈現出一種很自然的層次關系,如家族關系、軍隊 編制、行政機構等,這就需要用層次結構來描述。層次模型是按照層次結構的形式組織數據庫 數據的數據模型,用樹形結構來表示各類實體以及實體間的聯系。層次模型是在數據結構中滿 足下面兩個條件的基本層次聯系的集合:
• 有且飢有一個節點且沒有雙親節點,這個節點稱為根節點.
• 除根節點之外的其他節點有且只有一個雙親節點。

       在層次模型中,使用節點表示記錄。記錄之間的聯系用節點之間的連線表示,這種聯系是 父子之間的一對多的實體聯系。層次模型中的同一雙親的子女節點稱為兄弟節點,沒有子女節 點的節點稱為葉節點。層次模型示例如圖1.4 所示。

                                                                   image

            層次模型像一棵倒立的樹,只有一個根節點,有若干個葉節點,節點的雙親是唯一的。圖 1.5 是一個教學院系的數據結構, 圖1.6 是教學院系數據庫的一個實例,該層次數據結構中有4 個記錄。

                    imageimage


2. 層次模型的數據操作與完擋坦9束


           層次模型的數據操作主要有查詢、插入、刪除和更新。需要注意的是,進行插入、刪 除、更新操作時要滿足層次模型的完整性約束條件。層次模型必須滿足的完整性約束條件 如下:
(1)在進行插入記錄值操作時,如果沒有指明相應的雙親記錄值,就不能插入子女記 錄值。
(2) 進行刪除記錄操作時,如果刪除雙親記錄值,相應的子女節點值也同時被刪除。
(3)進行修改記錄操作時,應修改所有相應記錄,以保證數據的一致性。

3. 層次模型的優缺點


層次模型能夠描述自然界的一些基本關系,是其他數據模型所不能代替的,其主要優 點如下:
• 層次模型的數據結構比較簡單。
• 對於實體間聯系是固定的且預先定義好的應用系統,采用層次模型實現,其性能伏,於 關系模型,不低於網狀模型。
• 層次數據模型提供了良好的完整性支持。

       需要注意的是,層次模型中的任何一個給定的記錄值只有按其路徑查看時才能顯示它的全 部意義,沒有一個子記錄值能夠脫離其雙親記錄值而獨立存在。因此,層次模型對具有一對多 的層次關系的描述非常直觀、自然、容易理解。
同樣地,由於層次模型是較為單一的模型,因此能描述的基本關系較少。該模型存在的主 要缺點如下:
(1)現實世界中很多聯系是非層次性的,如多對多聯系、一個節點具有多個雙親等。
(2) 對插入和刪除操作的限制比較多。
(3)查詢子節點必須通過雙親節點。
( 4 ) 由於結構嚴密, 層次命令趨於程序化。
層次模型表示這類聯系的方法很不靈活,只能通過引入冗余數據(易產生不一致性)或創 建非自然的數據組織來解決。




1.3.4 網狀模型


     在現實世界中,事物之間的聯系更多是非層次關系,用層次模型表示非樹形結構很不直接, 而網狀模型則可以克服這一缺點。
      網狀數據模型的典型代表是DBTG 系統,這是20 世紀70 年代數據系統語言研究會 CConference on Data System Language, CODASYL) 下屬的數據庫任務組C Data Base Task 缸。up , DBTG) 提出的一個系統方案。DBTG 系統雖然不是實際的軟件系統,但是它提出的基本 概念、方法和技術具有普遍意義, 對於網狀數據庫系統的研制和發展起了重大的影響。后來許多 系統都采用DBTG 模型或者簡化的DBTG 模型,如CuUinetSo伽啞e 公司的IDMS 等。
1. 網狀模型的數據結構
網狀模型是指滿足下面兩個條件的基本層次聯系的集合:
• 有一個以上的節點沒有雙親。
• 節點可以有多於一個的雙親。

如圖1.7 所示, Ca) 、Cb) 和Cc) 圖都是網狀模型的示例。

image

        網狀模型是一種比層次模型更具普遍性的結構,去掉了層次模型的兩個限制,允許多個節 點沒有雙親節點, 允許節點有多個雙親節點,此外還允許兩個節點之間有多種聯系。因此, 網 狀模型可以更直接地去描述現實世界,而層次模型實際上是網狀模型的一個特例。

        與層次模型一樣,網狀模型也使用記錄和記錄值表示實體集和實體, 每個節點也表示一個 記錄,每個記錄可包含若干個字段。

2. 網狀模型的數據操作與完整性約束

        與層次模型相似,網狀模型的數據操作主要包括查詢、插入、刪除和更新。進行插入操作 時,允許插入尚未確定雙親節點值的子節點值。進行刪除操作時,只允許刪除雙親節點值。進 行更新操作時,只需更新指定記錄即可。
因此,一般來說,網狀模型沒有層次模型那樣嚴格的完整性約束條件,但具體的網狀數據 庫系統(如DBTG ) 對數據操作都加了一些限制,提供了一定的完整性約束。DBTG 在模式 DDL 中提供了定義DBTG 數據庫完整性的若干概念和語旬,主要有以下兒種。
(1) 支持記錄碼的概念。碼是唯一標識記錄的數據項的集合。在數據庫中不允許出現重 復值。

(2) 保證一個聯系中雙親記錄和子記錄之間是一對多的聯系。
(3)可以支持雙親記錄和子記錄之間的某些約束條件。例如,有些子記錄要求雙親記錄 存在才能插入, 雙親記錄刪除時也連同刪除。
3. 網狀數據模型的優缺點
       相對於層次模型,網狀數據模型所能描述的自然關系更多,主要優點如下:
• 能夠更為直接地描述現實世界.例如,一個節點可以有多個雙親,節點之間可以有多 種聯系。
• 具有良好的性能,存取效率較高.

      網狀數據模型也存在不少缺點,主要表現在:結構比較復雜,而且應用環境越大,數據庫 的結構就變得越復雜, 不利於最終用戶掌握:模型的數據定義語言( DDL ) 、數據操作語言 ( DML ) 復雜,用戶不容易使用。
      此外,網狀模型中由於記錄之間的聯系是通過存取路徑實現的,因此應用程序在訪問數據時 必須選擇適當的存取路徑。因此,用戶必須了解系統結構的細節,加重了編寫應用程序的負擔。


1.3.5 關系模型

        關系模型是當前最重要的、應用最廣泛的一種數據模型。目前,主流的數據庫系統大部分 都是基於關系模型的關系數據庫系統( Relational DataBase System, RDBS ) 的。1 970 年, 美 國IBM 公司SanJose 研究室的研究員E.F.Codd 首次提出數據庫系統的關系模型, 開創了數據 庫關系方法和關系數據理論的研究, 為數據庫技術的發展奠定了理論基礎。20 世紀80 年代以 來,計算機廠商新推出的DBMS 兒乎都支持關系模型, 非關系模型的產品也大都添加了關系 接口,數據庫領域當前的研究工作也都是以關系方法為基礎的。
1. 關系模型的數據結構
關系數據模型是建立在嚴格的數學概念基礎上的。在關系模型中,數據的邏輯結構是一張 二維表, 由行和列組成。關系模型中的主要術語如下。
(1)關系:一個關系對應通常所說的一張二維表。
(2) 元組: 表中的一行稱為一個元組,許多系統中把元組稱為記錄。
(3 )屬性: 表中的一列稱為一個屬性。一個表中往往會有多個屬性,為了區分屬性,要 給每一列起一個屬性名。

同一個表中的屬性應具有不同的屬性名。

( 4 ) 碼: 表中的某個屬性或屬性組的值可以唯一地確定一個元組,且屬性組中不含多余 的屬性,這樣的屬性或屬性組稱為關系的碼。
( 5 ) 域: 屬性的取值范圍。例如, 大學生年齡屬性的域是( 1 8~30 ) ,性別的域是(男,女)。
(6) 分量: 無組中的屬性值。
( 7 ) 關系模式:關系的型稱為關系模式, 是對關系的描述。關系模式的一般表示如下:

image

        在關系模型中,實體集以及實體間的聯系都是用關系來表示的。關系模型要求關系必須是 規范化的,即要求關系必須滿足一定的規范條件,這些規范條件中最基本的一條就是:關系的 每一個分量必須是一個不可分的數據項,也就是說,不允許表中還有表。關系模型示例如圖 l. 8 所示。

                                   image

2. 關系模型的數據操作與完翻業包柬
       關系數據模型的操作主要包括查詢、插入、刪除和修改數據,這些操作必須滿足關系的完 整性約束條件。關系模型中數據操作的特點是集合操作方式, 即操作對象和操作結果都是集合, 這種操作方式也稱為一次一集合的方式。相應地,非關系數據模型的操作方式是一次一記錄的 方式。
       關系的完整性約束條件包括三大類:實體完整性、參照完整性和用戶定義的完整性。實體 完整性定義數據庫中每一個基本關系的主碼應滿足的條件,能夠保證元組的唯一性。參照完整 性定義表之間的引用關系,即參照與被參照關系。用戶定義完整性是用戶針對具體的應用環境 制定的數據規則,反映某一具體應用所涉及的數據必須滿足的語義要求。

3. 關系模型的優缺點
         關系模型是當前使用最為廣泛的一類模型,目前的主流數據庫系統如Oracle、SQLSe凹町 等都采用關系模型。關系數據模型的優點主要體現在以下幾點:
• 關系模型與非關系模型不同,它是建立在嚴格的數學理論基礎上的.
• 關系模型的概念羊一,實體與實體間的聯系都用關系表示,對數據的檢索結果也是關 系(即表) ,所以其數據結構簡單、清晰,用戶易懂易用。
• 關系模型的物理存儲和存取路徑對用戶透明,從而具有更高的數據獨立性、更好的安 會保密性,簡化了程序員的數據庫開發工作。
需要注意的是,雖然關系模型是現在的主流, 但該模型也存在一定的缺陷, 主要表現在如下兩方面:
• 由於存取路徑對用戶透明,查詢效率往往不如非關系數據模型高,因此為了提高性能, 必須對用戶的查詢請求進行優化,這就增加了開發數據庫管理系統的難度和負擔.
• 關系數據模型不能以自然的方式表示實體集間的聯系,存在語義信息不足、數據類型 過少等弱點。



1.4 常見數據庫

目前,商品化的數據庫管理系統以關系型數據庫為主導產品,技術比較成熟。面向對象的 數據庫管理系統雖然技術先進,數據庫易於開發、維護,但尚未有成熟的產品。目前主流關系 型數據庫管理系統有Oracle、Access 和SQL Se凹町等。本節根據選擇數據庫管理系統的依據 比較分析這兒種主流數據庫管理系統的優勢和不足。

1.4.1 Access


Microsoft Office Access 是由微軟( Microsoft ) 公司發布的一款關系數據庫管理系統。它 結合了Microsoft Jet Database Engine 和圖形用戶界面兩項特點,是Microsoft Office 的系統程 序之一。
1. 優勢
Microsoft Office Access 提供了一個豐富的開發環境。這個開發環境給了用戶足夠的靈活 性和對Microsoft Windows 應用程序接口的控制,同時保護用戶免遭用高級或低級語言開發環 境開發時所碰到的各種麻煩。圖1.9 所示為Microsoft Office Access 數據庫的主界面。

Microso負Office Access 是一個把數據庫引擎的圖形用戶界面和軟件開發工具結合在一起 的數據庫管理系統,其主要優勢表現在如下幾個方面:
(1 )存儲方式單一。Access 管理的對象有表、查詢、窗體、報表、頁、宏和模塊,以上 對象都存放在后綴為( .mdb ) 的數據庫文件中, 便於用戶的操作和管理。
(2) 面向對象。Access 是一個面向對象的開發工具,利用面向對象的方式將數據庫系統 中的各種功能對象化, 將數據庫管理的各種功能封裝在各類對象中。它將一個應用系統當作是 由一系列對象組成的,對每個對象都定義一組方法和屬性。通過對象的方法、屬性完成數據庫 的操作和管理,極大地簡化了用戶的開發工作。同時,這種基於面向對象的開發方式,使得開 發應用程序更為簡便。

(3)界面友好、易操作。Access 是一個可視化工具,風格與Windows 完全一樣,用戶想 要生成對象並應用,只要使用鼠標進行拖放即可,非常直觀方便。系統還提供了表生成器、查 詢生成器、報表設計器以及數據庫向導、表向導、查詢向導、窗體向導、報表向導等工具,使 得操作簡便,容易使用和掌握。
( 4) 集成環境、處理多種數據信息。Access 是基於Windows 操作系統下的集成開發環境, 該環境集成了各種向導和生成器工具,極大地提高了開發人員的工作效率,使得建立數據庫、 創建表、設計用戶界面、設計數據查詢、報表打印等可以方便有序地進行。
( 5 ) Access 支持ODBC (開放數據庫連接, Open Database Connectivi桐,利用Access 強大的DDE (動態數據交換〉和OLE (對象的連接和嵌入)特性, 可以在一個數據表中嵌入 位圖、聲音、Excel 表格、Word 文擋, 還可以建立動態的數據庫報表和窗體等。Access 還可 以將程序應用於網絡,並與網絡上的動態數據相連接。利用數據庫訪問頁對象生成盯ML 文 件, 輕松構建IntemetlIntranet 的應用。


 

2. 缺陷
盡管Micros。我Office Access 具有許多的優點, 但它畢竟是一個小型數據庫,不可避免地 存在一些缺陷, 主要表現在:
(1 )數據庫過大時性能下降明顯。一般來說, 當Access 數據庫達到1 00MB 左右的時候, 數據庫性能會顯著下降。例如,當訪問使用Access 作為數據庫的網站時,人數過多時容易造 成IIS 假死,過多消耗服務器資源。
(2) 容易出現各種因數據庫刷寫頻率過快而引起的數據庫問題。
(3) Access 數據庫安全性比不上其他類型的數據庫。


1.4.2 SQL Server

SQL Se凹er 也是Microsoft 公司推出的關系型數據庫管理系統, 具有使用方便、可伸縮性 好與相關軟件集成程度高等優點,可跨越從運行Microsoft Windows 飩的PC 到運行Microsoft Windows 2012 的服務器等多種平台使用。圖1.10 所示為Microsoft SQL Se凹er 數據庫的 Management Studio 主界面。

Microso負SQL Server 是一個全面的數據庫平台,使用集成的商業智能( BI) 工具提供了 企業級的數據管理。Microsoft SQL Server 數據庫引擎為關系型數據和結構化數據提供了更安 全可靠的存儲功能,使用戶可以構建和管理用於業務的高可用和高性能的數據應用程序。SQL Se凹町的主要特點如下:
(1 )真正的客戶機/服務器體系結構。
(2) 圖形化用戶界面,使系統管理和數據庫管理更加直觀、簡單。
(3) 豐富的編程接口工具,為用戶進行程序設計提供了更大的選擇余地。
( 4) SQL Se凹er 與Windows NT 完全集戚,利用了NT 的許多功能,如發送和接收消息、 管理登錄安全性等, SQL Server 也可以很好地與Microsoft Office 產品集成。
( 5) 具有很好的伸縮性, 可跨越多種平台使用。
(6) 對Web 技術的支持度高,使用戶能夠很容易地將數據庫中的數據發布到Web 頁面上。
( 7) SQL Server 新版本提供數據倉庫功能,這個功能只在Oracle 和其他更昂貴的DBMS 中才有。

( 8 ) 內存在線事務處理( OLTP ) 引擎, 內存OLTP 整合到SQL Server 的核心數據庫管 理組件中,它不需要特殊的硬件或軟件就能夠無縫整合現有的事務過程,允許將SQL Server 內存緩沖池擴展到固態硬盤( SSD) 或SSD 陣列上。這一點對於支持繁重讀負載的OLTP 操 作特別好,能夠降低延遲、提高吞吐量和可靠性,消除10 瓶頸。
(9) 雲整合, 引入了智能備份( Smart Backups) 概念,能自動決定要執行完全備份還是 差異備份,以及何時執行備份。還允許將本地數據庫的數據和日志文件存儲到Azure 上。此外, SQL Server Management Studio 提供了一個部署向導,它可以幫助用戶輕松地將現有本地數據 庫遷移到Azure 虛擬機上。




1.4.3 Oracle

Oracle 數據庫系統是美國甲骨文( Oracle) 公司提供的以分布式數據庫為核心的一組軟件 產品,是目前流行的客戶/服務器(CLIENT/SERVER) 或B/S 體系結構的數據庫之一。圖1.1 1 所示為Or部le 10g 數據庫的Developer 主界面。

Oracle 數據庫是目前世界上使用最為廣泛的數據庫管理系統, 作為一個通用的數據庫系 統,它具有完整的數據管理功能:作為一個關系數據庫,它是一個完備關系的產品;作為分布 式數據庫, 它實現了分布式處理功能。只要在一種機型上學習了。racle 知識, 便能在各種類 型的機器上使用。
編寫本書時, Oracle 數據庫的最新版本為Oracle Database 12c 0 Oracle 12c 引入了一個新 的多承租方架構,使用該架構可輕松部署和管理數據庫雲。此外,一些創新特性可最大限度地 提高資源使用率和靈活性, 如Oracle Multitenant 可快速整合多個數據庫,而Automatic Data Optimization 和HeatMap 能以更高的密度壓縮數據和對數據分層。這些獨一無二的技術進步再 加上在可用性、安全性和大數據支持方面的增強,使得Oracle 12c 成為私有雲和公有雲部署的 理想平台。
Oracle 的特點如下。

(1 )名副其實的大型數據庫:由Oracle 建立的數據庫, 最大數據量可達幾百吉字節。
(2) 共享SQL 和多線索服務器體系結構:這兩個特性的結合可減少Oracle 的資源占用, 增強處理能力,支持成百甚至上千用戶。 (3)跨平台能力: Oracle 數據庫管理系統可以運行在100 多個硬件和軟件平台上。這一 點是其他PC 平台上的數據庫產品所不及的。
( 4 ) 分布式數據庫:可以便物理分布不同的多個數據庫上的數據被看成是一個完整的邏輯數據庫。盡管數據操縱的單個事務可能要運行於多處地點,但這對應用程序卻是透明的,就 好像所有的數據都是物理地存儲在本地數據庫中。
( 5 ) 卓越的安全機制: 包括對數據庫的存取控制、決定可以執行的命令、限制單一進程 可用的資源數量以及定義數據庫中數據的訪問級別等。
(6) 支持客戶機/服務器方式,支持多種網絡協議。
除上面講解的Microsoft Office Access、SQL Server 和Oracle 三個典型數據庫外, 還有許 多關系型數據庫也較為常見,如IBM DB2, Informix、Sybase、MySQL 等, 有興趣的讀者可 自行了解,此處不再贅述。


1.5 小結


1.6 經典習題與面試題



第2章 走進SQL Server 2016

SQLSe凹er 2016 是目前SQL 如何er 系列數據庫管理系統的;陸新版本, 是該系統家族中最 重要的一代產品。本章主要介紹SQL Server 2016 的特點、安裝和卸載及使用SQ L Se凹er 2016 幫助等相關內容。通過本章的學習,可以便讀者對SQL Server 2016 這款數據庫管理系統有一 個全方位的了解。
本章重點內容:
• 了解SQL Server 數據庫軟件的特點
• 了解SQL Server 2016 新的技術點
• 掌握S QL Server 2016 的安裝和卸載
• 了解如何使用SQL Server 2016 幫助功能


2.1 SQL Server 2016簡介

        SQL Server 是Mi crosoft 公司推出的關系型數據庫管理系統, 是一個全面的數據平台,為 企業提供可革的數據支持。2016 年7 月1 日,微軟發布了SQL Server 數據庫軟件家族中最重 要的一代產品,命名為SQL Server 2016 。從最早的OS/2 版本到如今的SQL Server 2016, SQL Se凹er 的每一代產品都會在完善基本功能的前提下增加新的功能,微軟SQL Server 2016 正式 版有着涉及數據庫引擎、分析服務等多個方面的功能性增強和改進,同時也增加了很多全新的
功能, 如數據全程加密、支持R 語言、延伸數據庫、實時業務分析與內存OLTP、原生JSON 支持、行級安全等。
         用戶可以根據應用程序的需要安裝不同版本的SQL Se凹er 2016 組件,不同版本的SQL Server 2016 可以滿足單位和個人獨特的性能、運行時間以及價格要求.在具體安裝過程中, 選擇哪些S QL Server 組件主要還是根據用戶的需求來指定。下面介紹SQL Server 2016 中的一 些常用版本。
微軟SQL Server 2 016 正式版分為4 個版本,分別是企業版( Ente叩ri se) 、標准版CStand缸d ) 、速成版C Express) 和開發人員版C Developer) 。與Visual Studio 一樣, SQL Se凹er 2016 也同樣提供免費版本,其中Express 速成版和Developer 開發人員版就是免費的,大家可
以隨意下載使用。

每一個版本都分為64 位和32 位兩種類型,主要區別如下。
• Enterprise ( 64 位和32 位) : SQL Se凹er 2016 Enterprise 是SQL 如何er 2016 中的高級 版本,此版本提供了全面的高端數據中心功能,性能快捷、虛擬化不受限制,同時還 具有端到端的商業智能。
• Standard (64 位和32 位) : SQL Server 2016 Standard 版提供了基本數據管理和商業 智能數據庫,使部門和小型組織能夠順利運行其應用程序並支持將常用開發工具用於 內部部署和雲部署。
• Developer ( 64 位和32 位): SQL Se凹er 2016 Developer 版本可以支持程序開發人員 構建任意符合SQL Se凹er 規則的應用程序。Developer 版包含Enterprise 版中的所有 功能,但這些功能只能用於開發和測試,不能用作服務器.
• Express( 64位和32 位): SQL Server 2016 Express版本是一款入門級的免費SQLServer 版本,此,版本主要用於學習和構建小型的應用程序, Express 版包含SQLSe凹er 中最 基本的數據管理功能。
SQLS巳:rver 2016 各版本的主要區別在於SQL Server 數據庫引擎實例的大小、最大關系數 據庫大小等。對於初學者而言, Express 免費版就能滿足各功能的學習要求。





2.2 SQL Server 2016的特點

SQL Se凹er 作為目前程序開發中使用廣泛的數據庫軟件之一, 每一次版本的更新都會帶來 許多不同的變化。最新版本的SQL Se凹er 2016 數據庫引擎引入了一些新功能和增強功能,這 些功能可以提高設計、開發和維護數據存儲系統的架構師、開發人員和管理員的能力和工作效 率。本節將對SQLSe凹er 2016 中的版本特點進行講述。


2.2.1 SQL Server 2016中新的組件功能

相對於舊版本, SQL Server 2016 中新的組件增加了許多新的功能。
在性能上, SQL Se凹er 2016 利用實時內存業務分析計算技術C Real-Time Operational Anal嚴ics & In-Mernory OLTP) 讓OLTP 事務處理速度提升了3 0 倍,可升級的內存列存儲技 術Ccolurnnstore) 讓分析速度提升高達100 倍,查詢時間從兒分鍾降低到了幾秒鍾。
安全性上, SQLSe凹er 2016 中也加入了一系列的新安全特性:
• 數據全程加密(A1ways Enc可pted) 能夠保護傳輸中和存儲后的數據安全.

• 透明數據加密( Transparent Data Enc可ption) 只需消耗極少的系統資源即可實現所有 用戶數據加密.
• 層級安全性控管( Row Level Security )讓客戶基於用戶特征控制數據訪問。 除此之外, SQL Se凹er 2016 還增加了許多新特性:
• 動態數據屏蔽( Dynamic Data Masking) •
• 原生JSON 支持。
• 通過PolyBase 簡單高效地管理T-SQL 數據.
• SQL Se凹er 支持R 語言。
• 多TempDB 數據庫文件。
• 延伸數據庫( Stretch Database) •
• 歷史表( Temporal Table )。
• 增強的Azure 混合備份功能。



2.2.2 SQL Server 2016混合雲技術

考慮到企業級的應用程序將面臨復雜的硬件配置、大量峰值需求等一系列的重要挑戰, Microsoft 提出了混合雲策略, 為傳統的私有雲、公共雲和混合雲環境提供支持, 從而克服這
些重要挑戰。
SQL Se凹er 2016 直接支持將數據文件和日志部署到Microsoft Azure 公有雲存儲,從而可 以無縫打通公有雲和私有雲的邊界, 其架構如圖2. 1 所示。

image

將數據庫部署在Azure Blob 中存儲的優點在於可提高數據庫性能、便於數據的遷移、提 高數據庫安全性、將數據虛擬化。此外, SQL Se凹er 2016 的存儲引擎中增加了對於Azure Blob 的數據訪問機制, 如圖2 .2 所示。

image

SQL Server 2016 與Azure 有了更深程度的集成,用戶可以通過將數據庫文件分配在Azure 上進行存儲,為數據庫帶來性能、可維護、安全上的多重保障。



2.3 安裝SQL Server 2016

在對SQL Server 2016 有了初步的了解后,本節將學習如何將SQLSe凹er 安裝在計算機上。 SQL Server 20 1 6 的安裝程序采用了簡單直觀的圖形化界面,用戶在安裝過程中只需要根據系 統提示選擇或輸入相關的配置信息即可。


2.3.1 SQL Server 2016安裝必備

在安裝SQL Server 2016 之前,首先需要對計算機的硬件和軟件環境進行簡單的評估。SQL Se凹er 2016 是一款系統資源消耗相對較大的軟件,如果硬件沒有達到要求,就無法安裝,系 統要求最低硬件配置如表2 .1所示。
表2.1 安裝SQL Server 2016 硬件要求

                                      image

安裝SQL Se凹er 2016 除了要符合表2.1中的硬件要求外,在軟件環境方面,首先建議在 NTFS 文件格式下運行SQL Se凹er 2016 ,因為FAT32 格式沒有文件安全系統;其次, NET Framework 3.5 SP1 是SQL Se凹er Management Studio 必需的,在安裝SQL Server 之前要確保 有.NET Framework 環境。 在安裝SQL SelVer 2016 之前要確保計算機操作系統為Windows8 及以上版本,否則會因 為缺少組件而導致無法正常安裝,並且僅x64 處理器支持SQL SelVer 2016 的安裝, x86 處理器不再支持此安裝。


2.3.2 SQL Server 2016的安裝

參考《SQL server 2016 安裝步驟


2.3.3 SQL Server 2016的卸載




2.4 使用SQL Server 2016幫助

 

2.5 小結


2.6 經典習題與面試題


第3章 創建數據庫

在安裝好SQL Server 2016 后, 用戶首先需要做的工作就是創建一個數據庫。SQL Server 2016 的數據庫是指以一定方式存儲在一起、能為多個用戶共亭、具有盡可能小的冗余度、與 應用程序,彼此獨立的數據集合。在SQL Se凹er 2016 中創建數據庫是每一個軟件開發人員和數 據庫管理員的必備技能。
本章重點內容:
• 了解數據庫的基本概念
• 掌握數據庫常用對象和數據庫的組成
• 掌握數據庫的命名規則
• 會使用管理器創建和修改數據庫


3.1 數據庫簡介

       在具體介紹SQL Server 2016 中如何創建數據庫之前,讀者需要對數據庫的基本概念有初 步了解。本節將為讀者介紹一些數據庫的專用術語,如數據庫對象、系統數據庫、表、記錄、 索引等。

 

3.1.1 數據庫基本概念

        簡單地說, 數據庫是一個單位或一個應用領域的通用數據處理系統, 存儲的是屬於企業和 事業部門、團體和個人的有關數據的集合。數據庫中的數據是從全局觀點出發建立的, 按一定 的數據模型進行組織、描述和存儲。數據庫的結構基於數據間的自然聯系,可提供一切必要的 存取路徑,且數據不針對某一應用, 而是面向全組織的,具有整體的結構化特征。
        數據庫中的數據是為眾多用戶共享信息而建立的,已經擺脫了具體程序的限制和制約。不 同的用戶可以按各自的用法使用數據庫中的數據,多個用戶可以同時共享數據庫中的數據資 源,即不同的用戶可以同時存取數據庫中的同一個數據。數據共享性不僅滿足了各用戶對信息 內容的要求,同時也滿足了各用戶之間信息通信的要求。

1 . 基本結構
       數據庫的基本結構分3 個層次,反映了觀察數據庫的3 種不同角度。以內模式為框架所組成的數據庫叫作物理數據庫,以概念模式為框架所組成的數據庫叫作概念數據庫,以外模式為 框架所組成的數據庫叫作用戶數據庫。
(1 )物理數據層
它是數據庫的最內層, 是物理存儲設備上實際存儲的數據的集合。這些數據是原始數據, 是用戶加工的對象,由內部模式描述的指令操作處理的位串、字符和字組成。
(2) 概念數據層
它是數據庫的中間一層, 是數據庫的整體邏輯表示。概念數據庫指出了每個數據的邏輯定 義及數據間的邏輯聯系,是存儲記錄的集合,涉及的是數據庫所有對象的邏輯關系,而不是它 們的物理情況,是數據庫管理員概念下的數據庫。
(3)用戶數據層
它是用戶所看到和使用的數據庫, 表示了一個或一些特定用戶使用的數據集合,即邏輯記 錄的集合。

2 . 主要特點
        數據庫技術是數據管理技術發展到現在的最新產物,經歷了人工管理階段和文件系統階 段。數據庫的主要特點是實現數據共享、減少數據冗余、實現數據集中控制,提高數據的可靠 性和安全性,具體如下:
(1)實現數據共享
數據共享包括所有用戶可同時存取數據庫中的數據, 也包括用戶可以用各種方式通過接口 使用數據庫,並提供數據共享。
( 2) 減少數據的冗余度
與文件系統相比,由於數據庫實現了數據共事, 因此避免了用戶各自建立應用文件,減少 了大量重復數據,減少了數據冗余,維護了數據的一致性。
(3)數據的獨立性
數據的獨立性包括邏輯獨立性和物理獨立性,數據庫實現了數據在邏輯和物理上的相 對獨立。

(4) 數據實現集中控制
在文件管理方式中,數據處於一種分散的狀態,不同的用戶或同一用戶在不同處理中其文 件之間毫無關系。利用數據庫可對數據進行集中控制和管理,並通過數據模型表示各種數據的組織以及數據間的聯系。
(5) 數據的安全性和可靠性
數據庫提供了相關技術保障數據具有一致性和可維護性,主要包括安全性控制、完整性控 制和並發控制。其中,安全性控制用於防止數據丟失、錯誤更新和越權使用;完整性控制用於 保證數據的正確性、有效性和相容'性;並發控制使在同一時間周期內允許對數據實現多路存取, 又能防止用戶之間的不正常交互作用。
(6) 故障恢復
故障恢復是由數據庫管理系統提供的一套方法,可及時發現故障和修復故障,從而防止數 據被破壞。數據庫系統能盡快恢復數據庫系統運行時出現的故障,可能是物理上或邏輯上的錯 誤。例如,對系統的誤操作造成的數據錯誤等。


3. 數據庫種類
        數據庫通常分為層次式數據庫、網絡式數據庫和關系式數據庫3 種。不同的數據庫是按不 同的數據結構來聯系和組織的。在當今的互聯網時代,最常見的數據庫模型主要有兩種,即關 系型數據庫和非關系型數據庫。
(1)關系型數據庫
關系型數據庫模型是把復雜的數據結構歸結為簡單的二元關系(二維表格形式)。在關系 型數據庫中,對數據的操作兒乎全部建立在一個或多個關系表格上,通過對這些關聯的表格分 類、合並、連接或選取等運算來實現數據庫的管理。
關系型數據庫誕生40 多年了,從理論產生發展到現實產品。例如, Oracle 、SQL Se凹er 和MySQL 等都是關系型數據庫。其中, Oracle 在數據庫領域處於霸主地位,形成每年高達數 百億美元的龐大產業市場。
(2) 非關系型數據庫
隨着互聯網Web 2.0 網站的興起,傳統的關系數據庫在應付Web 2.0 網站,特別是超大規 模和高並發的SNS 類型的Web 2.0 純動態網站已經顯得力不從心,暴露了很多難以克服的問 題,而非關系型的數據庫(Not 臼ùy SQL, NoSQL,不僅是SQL)則由於其本身的特點得到 了非常迅速的發展。NoSQL 數據庫在特定的場景下可以發揮出難以想象的高效率和高性能, 它是作為對傳統關系型數據庫的一個有效補充。

非關系型數據庫是一項全新的數據庫革命性運動。NoSQL 在早期就有人提出,發展至2009 趨勢越發高漲。NoSQL 的擁護者們提倡運用非關系型的數據存儲,相對於鋪天蓋地的關系型 數據庫運用,這一概念是一種全新的思維的注入。


3.1.2 數據庫常用對象

數據庫對象是數據庫的組成部分,常見的對象有表、索引、視圖、圖表、默認值、規則、 觸發器、存儲過程、用戶、序列等,本小節將簡要介紹這些對象的概念,為后續學習打下基礎。

(1)表( Table)


         數據庫中的表與日常生活中使用的表格類似,由行( Row ) 和列(Column) 組成。其中, 列由同類的信息組成,每列又稱為一個字段,每列的標題稱為字段名。行包括若干列的信息項。 一行數據稱為一個或一條記錄,是有一定意義的信息組合。一個數據庫表由一條或多條記錄組 成,沒有記錄的表稱為空表。 每個表中通常都有一個主關鍵字,用於唯一地確定一條記錄。

(2) 索引CIndex)


         索引是根據指定的數據庫表列建立起來的順序。它提供了快速訪問數據的途徑, 並且可監 督表的數據,使其索引所指向的列中的數據不重復。

(3)視圖(View)


          視圖看上去似乎與表一模一樣,具有一組命名的字段和數據項, 但它其實是一個虛擬的表, 在數據庫中並不實際存在。視圖是由查詢數據庫表產生的,它限制了用戶能看到和修改的數據。 由此可見,視圖可以用來控制用戶對數據的訪問,並能簡化數據的顯示,即通過視圖只顯示那 些需要的數據信息。

(4) 圖表( Diagram)


圖表其實就是數據庫表之間的關系示意圖, 利用圖表可以編輯表與表之間的關系。

(5) 默認值(Default)


默認值是當在表中創建列或插入數據時,對沒有指定其具體值的列或列數據項賦予事先設 定好的值。

(6) 規則( Rule)


規則是對數據庫表中數據信息的限制,其限定的是表的列。

( 7) 觸發器(Trigger)


觸發器是一個用戶定義的SQL 事務命令的集合。當對一個表進行插入、更改、刪除時, 這組命令就會自動執行。

(8) 存儲過程(Stored Procedure)


存儲過程是為完成特定的功能而匯集在一起的一組SQL 程序語旬,經編譯后存儲在數據 庫中的SQL 程序。

(9) 用戶(User)


所謂用戶,就是有權限訪問數據庫的人,同時需要自己登錄賬號和密碼。一般來說,數據庫用 戶分為管理員用戶和普通用戶,前者可對數據庫進行修改刪除,后者只能進行閱讀、查看等操作。 除了如上列出的數據庫對象之外,不同的數據庫管理系統也有部分自定義的對象,將在具 體學習中分別介紹,此處不再贅述。



3.1.3 數據庫的組成

前面章節提到,數據庫是相關數據的集合。一個數據庫含有各種成分,包括數據表、記錄、 字段、索引等。從使用者的觀點看,數據庫主要由文檔( Documents) 、記錄( R巳cords) 和字 段( Fields) 3 個層次構成。從開發者的角度看,數據庫主要由數據表( Table) 、記錄( Record) 、 字段( Field ) 、索引CIndex ) 、查詢( Query ) 和視圖( View ) 等部分組成, 具體組成部分如 下。
(1)數據庫( Database)
SQL Server 20 1 6 數據庫是關系型數據庫,一個數據庫由一個或一組數據表組成。每個數 據庫都以文件的形式存放在磁盤上,即對應於一個物理文件。不同的數據庫與物理文件對應的 方式也不一樣。
(2) 數據表( Table)
數據表簡稱表,由一組數據記錄組成,數據庫中的數據是以表為單位進行組織的。一個表 是一組相關的按行排列的數據,每個表中都含有相同類型的信息。事實上,數據表實際上是一 個二維表格。例如,一個班所有學生的考試成績可以存放在一個表中,表中的每一行對應一個 學生, 包括學生的學號、姓名及各門課程成績。
(3)記錄( Record)
表中的每一行稱為一個記錄, 它由若干個字段組成。
( 4 ) 字段( Field )
表中的每一列稱為一個字段,也稱為域。每個字段都有相應的描述信息, 如數據類型、數 據寬度等。
( 5 ) 索引( Index )
為了提高訪問數據庫的效率,可以對數據庫使用索引。當數據庫較大時,為了查找指定的 記錄,使用索引和不使用索引的效率有很大差別。索引實際上是一種特殊類型的表,其中含有 關鍵字段的值(由用戶定義)和指向實際記錄位置的指針,這些值和指針按照特定的順序(也 由用戶定義〉存儲,從而可以以較快的速度查找到所需要的數據記錄。

( 6 ) 查詢( Query )
查詢實質上是一條SQL (結構化查詢語言)命令, 用來從一個或多個表中獲取一組指定 的記錄,或者對某個表執行指定的操作。當從數據庫中讀取數據時,往往希望讀出的數據符合 某些條件, 並且能按某個字段排序,使用查詢可以使這一操作容易實現而且更加有效。
SQL 是非過程化語言(有人稱為第4 代語言) ,在用它查找指定的記錄時,只需指出做 什么,不必說明如何做。每個語句可以看作是一個查詢(Qu町) ,根據這個查詢可以得
到需要的查詢結果。

( 7 ) 過濾器( Filter)
過濾器是數據庫的一個組成部分, 它把索引和排序結合起來, 用來設置條件, 然后根據給 定的條件輸出所需要的數據。
(8) 視圖( View)
數據的視圖指的是查找到(或者處理)的記錄數和顯示(或者進行處理)這些記錄的順序。 在一般情況下, 視圖由過濾器和索引控制。


3.1.4 系統數據庫

在SQLSe凹er 20 1 6 系統運行時會用到的相關信息(如系統對象和組態設置等〉都是以數 據庫的形式存在的, 而存放這些系統信息的數據庫稱為系統數據庫。
1 . 系統數據庫
當用戶成功安裝SQL Se凹er 20 1 6 后, 打開該數據庫時會發現系統會自動建立master 、 model 、msdb、resource 和tempdb 五個系統數據庫。這些系統數據庫有着各自不同的功能, 具體如下:
(1) master
master 數據庫是SQL Server 20 1 6 中最重要的數據庫, 記錄了SQL Server 20 1 6 系統中所有 的系統信息, 包括登入賬戶、系統配置和設置、服務器中數據庫的名稱、相關信息和這些數據 庫文件的位置以及SQLSe凹er 2016 初始化信息等。由於master 數據庫記錄了如此多且重要的 信息, 一旦數據庫文件損失或損毀,將對整個SQL Server 系統的運行造成重大的影響, 甚至 使得整個系統癱瘓, 因此要經常對mas陽數據庫進行備份, 以便在發生問題時對數據庫進行 恢復。
(2) tempdb
tempdb 數據庫是存在於SQL Server 2016 會話期間的一個臨時性的數據庫。一旦關閉SQL Server 2016, tempdb 數據庫保存的內容將自動消失。重新啟動SQLSe凹er 201 6 時,系統將重 新創建新的且內容為空的tempdb 數據庫。
tempdb 保存的內容主要包括顯示創建臨時對象, 例如表、存儲過程、表變革或游標; 所有版本的更新記錄; SQL Server 創建的內部工作表:創建或重新生成索引時, 臨時排序 的結果。
(3) model
model 系統數據庫是一個模板數據庫, 可以用作建立數據庫的模板。它包含建立新數據庫 時所需的基本對象, 如系統表、查看表、登錄信息等。在系統執行建立新數據庫操作時, 它會 復制這個模板數據庫的內容到新的數據庫上。由於所有新建立的數據庫都是繼承這個model 數據庫而來的, 因此, 若更改model 數據庫中的內容,則稍后建立的數據庫也都會包含該變動。 model 系統數據庫是tempdb 數據庫的基礎, 由於每次啟動SQL Se凹er 2016 時, 系統都會創建tempdb 數據庫,因此model 數據庫必須始終存在於SQL Server 系統中,用戶不能刪除該 系統數據庫。
(4) msdb
msdb 數據庫是代理服務數據庫,為其報警、任務調度和記錄操作員的操作提供存儲 空間。
SQLSe凹er 代理服務是SQL Server 2016 中的一個Windows 服務,用於運行任何己創建的 計划作業。作業是指SQL Server 中定義的能自動運行的一系列操作。例如,如果希望在每個 工作日下班后備份公司所有服務器,就可以通過配置SQL Server 代理服務使數據庫備份任務 在周一到周五的22: 00 之后自動運行。
( 5) resource
resource 數據庫是只讀數據庫,包含SQL Se凹er 中所有系統對象,如sys.object 對象。SQL Server 系統對象在物理上持續存在於resource 數據庫中。
2. 修改系統數據
SQL Server 2016 不支持用戶直接更新系統對象(如系統數據庫、系統存儲過程和目錄視 圖) 中的信息。但SQL Server 2016 提供了一整套管理工具,用戶可以使用這些工具充分管理 他們的系統以及數據庫中的所有用戶和對象。其中包括:
(1)管理實用工具,如SQLSe凹er Management Sωdio ,幫助用戶管理所有SQL Server 2016 的數據對象。
(2) SQL-SMO API,使程序員獲得在其應用程序中管理SQLServer 的全部功能。
(3)下SQL 腳本和存儲過程,這組工具允許用戶使用系統存儲過程和T-SQL DDL 數據 定義語句。

3. 查看系統數據庫數據
同樣, SQL Server 2016 允許用戶通過使用以下方法獲得系統數據庫的目錄和相關系 統信息:
(1)系統目錄視圖。
(2) SQL-SMO 。
(3) Windows Management Instrumentation (WMI)接口。
( 4) 應用程序中使用的數據API (如ADO、OLEDB 或ODBC ) 的目錄函數、方法、特 性或屬性。
( 5) T-SQL 系統存儲過程和內置函數。




3.2 SQL Server的命名規則

為了提供完善的數據庫管理機制, SQL Se凹er 20 1 6 設計了嚴格的命名規則。用戶在創建 或引用數據庫實體(如表、索引、約束等〉時, 必須遵守SQL Server 20 16 的命名規則, 否則 有可能發生一些難以預料和檢查的錯誤。本節將具體講解標識符的分類和格式、數據庫對象的 命名規則與實例命名規則。


3.2.1 標識符

     SQL Server 20 1 6 的所有對象, 包括服務器、數據庫以及數據庫對象,如表、視圖、列、 索引、觸發器、存儲過程、規則、默認值和約束等都可以有一個標識符。對絕大多數對象來說, 標識符是必不可少的, 但對某些對象(如約束)來說, 是否規定標識符是可選的。對象的標識 符一般在創建對象時定義, 作為引用對象的工具使用。
例如下面的SQL 語句:

CREATE TABLE student
 i d i nt primary key,
 name varchar (20)

      這個例子創建了一個表格,表格的名字是一個標識符: student。表格中定義了兩列, 列的 名字分別是id 和name ,它們都是合法的標識符。此外,上述語句還自動定義了另一個未命名 的主鍵約束。
1. 標識符分類


具體來說, SQL Se凹er 201 6 共定義了兩種類型的標識符: 常規標識符( Regular Identifier) 和分隔標識符( Delimited Identifier) 。
(1)常規標識符: 常規標識符嚴格遵守標識符有關格式的規定, 在T-SQL 語句中, 凡是 常規標識符都不必使用分隔符, 如使用口和, ,來進行分隔。例如,上述例子中使用的表名 student 就是一個常規標識符,在student 上不必添加分隔符。
(2) 分隔標識符: 那些使用了分隔符號(如口和, ,等〉來進行位置限定的標識符。使 用了分隔標識符, 既可以遵守標識符命名規則, 又可以不遵守標識符命名規則。需要注意的是, 遵守了標識符命名規則的標識符, 加分隔符與不加分隔符是等效的。例如, SELECT * FROM [sωdent]語句從student 表格中查詢出所有數據,其功能與SELECT * FROM student 語句等效。 這是因為在" [] "中的標識符遵守標識符命名規則, "[]"被忽略不計。

如果是不遵守標識符命名規則的標識符,那么在T-SQL 語句中就必須使用分隔符號加以 限定,如:

SELECT * FROM [my table] WHERE [order]=lO

在這個例子中,必須使用分隔標識符,因為在FROM 子句中的標識符my table 中含有空 格, 而where 子句中的標識符order 是系統保留字。
這兩個標識符都不遵守標識符命名規則,必須使用分隔符,否則無法通過代碼編譯。

2. 標識符格式


與程序設計語言類似, SQL Se凹er 2016 中的標識符必須符合一定的格式規定,其具體內 容如下:
(1)標識符必須是統一碼(Unicode) 2.0 標准中規定的字符,以及其他一些語言字符, 如漢字等。
(2) 標識符后的字符可以是"_" "@" "#" "$"及數字。
(3)標識符不允許是T-SQL 的保留字。
(4) 標識符內不允許有空格和特殊字符。
需要注意的是,標識符最多可以容納1 28 個字符。此外,某些以特殊符號開頭的標識符在 SQLSe凹er 中具有特定的含義。例如,以"@"開頭的標識符表示這是一個局部變革或一個函 數的參數,以"#"開頭的標識符表示這是一個臨時表或一個存儲過程,以"棉"開頭的標識 符表示這是一個全局的臨時數據庫對象。在T-SQL 中, 全局變量以" @@"開頭。







3.2.2 對象命名規則

SQL Server 20 1 6 使用T-SQL 語言,該語言中使用的數據對象包括表、視圖、存儲過程、 觸發器等, 這些對象的標識符也需符合如下命名規則。
(1)第一個字符必須是這些字符之一:字母a-z 和A-Z、來自其他語言的字母字符、下 划線-、@或者數字符號扒
(2) 后續字符可以是所有的字母、十進制數字、@符號、美元符號($)、數字符號或下 划線。
除非另外指定,否則所有對數據庫對象名的T-SQL 引用可以是由4 部分組成的名稱,格 式如下:

[
server_name.[database_name] . [owner_name].
 | database_name. [owner_name].
 | owner name.
]

 object_name


具體的語法解釋如下:
server_name 指定鏈接服務器名稱或遠程服務器名稱.
• 當對象駐留在SQL Server 2016 數據庫中時, database_name 指定該SQL Server 2016 數據庫的名稱;當對象在鏈接服務器中時,則指定OLEDB 目錄。
• 如果對象在SQL Server 2016 數據庫中, owner name 指定擁有該對象的用戶;當對象 在鏈接服務器中時,則指定OLEDB 架構名稱。
object_name 是引用對象的名稱. 引用對象名的格式如表3. 1 所示。

image

當引用某個特定對象時,不必總是為SQL Server 指定標識該對象的服務器、數據庫和所 有者。可以省略中間級節點,而使用句點表示這些位置。對象名的有效格式是:

server.database.owner.object
server . database .. object
server..owner.object
server . . . obj ect
database.owner.object
database. . object
owner.object
革鑫






3.2.3 實例命名規則


        所謂SQL 實例,即SQL 服務器引擎。每個SQL Server 2016 數據庫引擎實例各有一套不 為其他實例共享的系統及用戶數據庫,在一台計算機上可以安裝多個SQL Server 2016 , 每個 SQL Server 2016 就可以理解為一個實例。

       實例又分為"默認實例"和"命名實例",如果在一台計算機上安裝第一個SQLServer, 命名設置保持默認, 那么這個實例就是默認實例。在SQL Server 20 1 6 中,默認實例的名字采 用計算機名,實例的名字一般由計算機名字和實例名字兩部分組成。為更好地理解實例,讀者 可以從如下幾個方面着手:
(1)實例名稱是一個SQLSe凹er 服務的名稱,可以為空或者任何名稱(英文字符) ,實 例名稱不能重復。
(2) 如果安裝時一直提示寫實例名稱,說明已經存在一個默認名稱的SQLServer 實例, 它使用了默認的空名稱。
(3)一個實例就是一個單獨的SQL Server 服務。如果安裝了指定的SQL Server 實例,可 以在Windows 服務列表中看到該實例的服務名稱。
( 4 )連接數據庫時,必須指明數據庫實例名稱。例如,使用默認配置安裝了一個SQL Server 后,它的實例名稱為空。
(5) 再次執行SQLServer 安裝程序,並不會提示己經安裝了SQL Server,而是在設置實 例名稱時,讓用戶指定一個新的實例名稱,才能進行下一步。
(6) 卸載SQLServer 時,可以選擇卸載一個SQLSe何時實例。

提示:正確掌握數據庫的命名和引用方式是用好SQL Server 的前提,也有助於用戶理解SQL Server 中的其他內容。



3.3 創建與管理數據庫

SQL Se凹er 2016 中有多種創建數據庫的方式,用戶可根據自身的喜好或不同的應用環境 進行選擇。同樣地, SQL Server 20 1 6 數據庫的管理也有多種實現方式。本節將為讀者做具體 介紹。


3.3.1 使用管理器創建數據庫

    本小節主要講解如何使用SQLSe凹er 20 1 6 管理器直接創建數據庫,從限制和局限、必備 條件、建議及權限兒方面開展討論, 並演示創建流程。
(1)限制和局限: 在一個SQL Se凹町的實例中最多可以指定32767 個數據庫。
(2) 必備條件: CREATE DATABASE 語句必須以自動提交模式(默認事務管理模式〉 運行,不允許在顯式或隱式事務中使用。
(3)建議:創建、修改或刪除用戶數據庫后,應備份mas也r 數據庫。在創建數據庫時, 根據數據庫中預期的最大數據草創建盡可能大的數據文件。
(4) 權限:需要有對master 數據庫的CREATE DATABASE 權限,或CREATE ANY DATABASE/ALTER ANY DATABASE 權限。為了控制對運行SQL Se凹er 實例的計算機上的 磁盤使用,通常只有少數登錄賬戶才有創建數據庫的權限。
       在SQL Server 20 16 中創建數據庫一般有兩種方法,一是使用管理器創建;二是通過SQL 命令創建。其中, SQL Se凹er 2016 的管理器是SQL Server Management Studio Express 工具。
下面演示使用管理器創建數據庫的具體步驟。

imageimageimage


3.3.2 使用管理器修改數據庫

本小節講解如何使用管理器修改數據庫, 包括重命名數據庫、更改數據庫的選項設置、增 加數據庫的大小及顯示數據庫的數據和日志空間信息的設置。

1. 重命名數據庫

image

2. 更改數據庫的選項設置

對於已經創建的SQL Server 2016 數據庫,用戶還可以更改該數據庫的屬性,可以通過【選 項】窗體來實現,具體步驟如下:

image

imageimage

3. 增加數據庫的大小
當用戶在使用SQL Server 2016 數據庫的過程中,因數據量的增大而導致數據庫無法容納 時,可以增加數據庫的大小,其實現步驟如下:

image

image


4. 顯示數據庫的數據和日志空間信息
若要顯示SQL Server 2016 數據庫的數據和日志空間信息,則可通過如下步驟來實現:

image





3.3.3 使用管理器刪除數據庫


本小節講解如何使用企業管理器刪除數據庫,同樣也從限制和局限、必備條件、建議及權 限兒方面開展討論, 並演示刪除流程。

(1)限制和局限:不能刪除系統數據庫。
( 2) 必備條件:刪除數據庫中的所有數據庫快照。如果日志傳送涉及數據庫,就刪除日 志傳送。如果為事務復制發布了數據庫, 或將數據庫發布或訂閱到合並復制,就從數據庫中刪 除復制。
(3 )建議:考慮對數據庫進行完整備份,只有通過還原備份才能重新創建己刪除的數 據庫。
( 4 ) 權限:若要執行DROP DATABASE 操作,則用戶必須至少對數據庫具有CONTROL 權限。
當用戶確認要刪除SQL Se凹er 2016 中的某個數據庫時,可以直接在SQL Server Management Studio Express 管理器中刪除該數據庫,具體操作為:在SQLServer 對象資源管理 器中選擇目標數據庫,如TEST 數據庫,然后右擊,選擇【刪除】命令,如圖3.9 所示,確認 選擇了正確數據庫,然后單擊【確定】按鈕。

image




3.3.4 操作學生數據庫

imageimageimage

imageimage





3.4 小結

數據庫的創建和使用是用戶學習SQL Server 20 1 6 的入門環節。本章闡述數據庫的基本概 念,首先介紹了數據庫的常用對象、組成及系統數據庫;然后簡要描述SQL Server 數據庫的 命名規則;最后展示使用SQL Server 2016 管理器創建和管理數據庫的詳細步驟。本章的難點 是需要掌握數據庫領域大量的基本概念,雖然有些概念一開始接觸會感到比較抽象, 但隨着學 習的逐漸推進, 在后續章節中就會逐漸變得清晰、具體起來。





3.5 經典習題與面試題



第4章 數 據 表

本章主要介紹SQL Server 2016 中的數據表對象,並對數據表的基本操作進行詳細講解, 對SQL Server 2016 中的基本數據類型、創建新的數據表、查看數據表結拘、添加數據字段、 修改數據類型、對數據表的約束操作等內容做闡述。通過本章的學習, 用戶可以對數據表有基 本的認識和了解, 掌握創建和修改數據表的基本方法, 理解數據約束的作用和意義。
本章重點內容:
• 理解數據表和數據庫之間的關系
• 掌握數據表中的基本數據類型
• 掌握使用管理器創建和維護數據表
• 數據的約束操作


4.1 數據表概述

         數據表是數據庫中最基本的操作對象,通常說的把數據存放在數據庫中其實就是存放在數 據庫中的一張張數據表中。數據表中的數據按照行和列的規則來進行數據存儲, 每一行為一條 數據記錄, 一條數據記錄是由多個字段的描述信息組成的。每一列稱為一個字段,列的標題稱 為字段名, 它們都具有相同的描述信息,如數據類型、字段大小等。一系列行和列的合集稱為 域。
         在具體的學習過程中,讀者可以把數據庫理解為一個記錄本, 數據表就是其中的每一頁紙。 一個數據庫數據內容的多少其實並不是指這本記錄本有多大多厚, 而是指每一頁紙張記錄的內 容有多少。
        數據表的主要作用是存儲各類數據信息,由行和列組成。例如,有一張記錄了員工信息的 employee 表,每一個字段就是用來描述員工的一個特定類型信息,比如姓名,每一行則包含 用於描述某一員工的所有信息: 工號、姓名、性別、學歷,這些信息的集合稱為一條記錄,如 表4.1 所示。

                                    image

4.1.1 SQL Server 2016基本數據類型

     數據雖然是用戶存儲數據的基本依據,用於設置保存數據的基本類型。SQL Server 2016 中支持多種數據類型的設置,包括字符型、數值型、日期型等。數據類型的作用在於規划每個 字段所存儲的數據內容類別和數據存儲量的大小, 合理地分配數據類型可以達到優化數據表和 節省空間資源的效果。
      SQL Server 20 16 數據庫管理系統中的數據類型分為兩類:一類是系統提供給用戶使用的 默認數據類型,稱為基本數據類型;另一類是用戶自定義的數據類型。下面先介紹基本數據類 型的內容。

1. 整數類型
        整數類型是SQL Se凹er 20 16 中常用的數據類型之一, 主要用於存儲整數值, 如存放" 年 齡" "工齡"等信息,數值型的數據可以直接進行運算處理。具體來說, SQL Server 201 6 的 整數類型包含如下4 種:
( 1 ) int (INTEGER )
INT (或lNTEGER ) 的存儲容量為4 個字節,其中一個二進制位表示正負符號, 一個字 節8 位。根據字節大小,用戶可以算出它所能存儲的數據容量為31 位, 用於存儲image 內所有的整數。
(2) SMALLlNT
SMALL劇T 的存儲量為2 個字節, 其中一個二進制位表示正負符號, 剩余的1 5 位用來存 儲數據內容,用於存儲image 內所有的整數。
(3 ) TINYINT
TINYlNT 只占用一個字節存儲空間,用於存儲0-255 的所有整數。
(4 ) BIGINT
BIGlNT 是所有整數類型中存儲量最大的,存儲容量達到8 個字節,用於存儲image 中所有的整數。

2. 浮點數據類型

             浮點數據類型用於存儲十進制的小數。浮點類型的數值在SQL Server 20 1 6 中使用了上舍入 (或稱只入不舍)的方法進行存儲,當且僅當要舍入的是一個非零整數時,對其保留數字部分的 最低有效位上的數值加1, 並進行必要的進位。SQL Server 20 1 6 的浮點數據類型包含如下3 種:
( 1) REAL
REAL 類型的存儲空間為4 個字節,可精確到第7 位小數,其范圍為-3.4E+3 8--3.40E+38 。
(2) FLOAT
FLOAT 數據類型是一種近似數值類型,供浮點數使用。浮點數是近似的,是因為在其范 圍內不是所有的數都能精確表示。浮點數可以是從-1.79E+308-1.79E+308 的任意數。
(3) DECIMAL
DECIMAL 數據類型提供浮點數所需要的實際存儲空間,能用來存儲從image 的 固定精度和范圍的數值型數據。使用這種數據類型時,必須指定范圍和精度。范圍是小數點左 右所能存儲的數字的總位數,精度是小數點右邊存儲的數字的位數。例如, DECIMAL(13 3) 表示共有13 位,其中整數1 0 位、小數3 位。

3. 字符類型
字符類型同樣是SQL Server 2016 中常用的數據類型,可用於存儲漢字、符號、英文、標點符 號等,數字同樣可以作為字符類型來存儲。SQL Server 2016 的字符類型包含如下4 種:
(1 ) CHAR
CHAR 數據類型用來存儲指定長度的定長非統一編碼型的數據。當定義一列此類型的數 據時,用戶必須指定列長。當用戶知道要存儲的數據的長度時,此數據類型就較為適用。例如, 當一個字段要用於存儲手機號碼時, 需用到11 個字符, CHAR 類型默認為存儲一個字符, 最 多可存儲8000 個字符。
(2) VARCHAR
VARCHAR 數據類型與CHAR 類型一樣,用來存儲非統一編碼型字符數據。與CHAR 型 不一樣的是,此數據類型為變長。當定義一列該數據類型的數據時,用戶要指定該列的最大長 度。它與CHAR 數據類型最大的區別是, 存儲的長度不是列長, 而是數據的長度。
(3) NCHAR
NCHAR 數據類型用來存儲定長統一編碼字符型數據。統一編碼用雙字節結構來存儲每個 字符, 而不是用單字節(普通文本中的情況)。它允許大量地擴展字符。此數據類型能存儲 4000 種字符,使用的字節空間上增加了一倍。

(4) NVARCHAR
NVARCHAR 數據類型是一種變長類型的字符型數據, 具有統一的編碼方式。此數據類型 能存儲4000 種字符,使用的字節空間增加了一倍。


4. 日期和時間類型
(1) DATE
DATE 類型用於存儲常用日期,該類型占3 個字節的存儲空間,數據的存儲格式為 YYYY-MM-DD 。
• YYYY: 表示日期的年份,取值范圍為0001 -9999.
• MM: 表示日期中的月份,取值范圍為01-12.
• DD: 表示日期中的某一天,取值范圍為0 1-3 1 .
(2) TIME
TIME 類型用於存儲一天當中的某一個時間,該類型占5 個字節的存儲空間,數據的存儲 格式為HH :MM:SS[.NNNNNNN]。
• HH: 表示存儲時間的小時位,取值范圍為0-23.
• MM: 表示存儲時間的分鍾位,取值范圍為仙5 9.
• SS: 表示存儲時間的秒位,取值范圍為脅5 9.
• N: 表示存儲時間秒的小數位,取佳范圍為0-9999999.

(3) DATETIME
DATETI如E 數據類型用來表示日期和時間。這種數據類型存儲從1 753 年1 月1 日到9999 年12 月3 1 日的所有日期和時間數據,精確到三百分之一秒或3.33 毫秒,該類型占用8 個字 節的存儲空間。
( 4) DATETIME 2
DATETIME 2 是從SQL Se凹er 2008 版本以后支持的新日期類型,是DATETIME 的擴展。 相比於DATET隊伍, DATET趴在E 2 所支持的日期從000 1 年01 月01 日到9999 年12 月3 1 日, 時間精度為100 納秒, 占用6~8 字節的存儲空間。
( 5) SMALLDATET1ME
SMALLDA TETIME 類型與DATET脅伍類型相似, 只是它所支持的日期范圍更小,從1900 年1 月1 日到2079 年6 月6 日, 占用4 字節的存儲空間。

5. 文本和圖形數據類型
(1 ) TEXT
TEXT 數據類型用於存儲大容量的文本數據, 它的理論容量為image 個字 節,在實際使用TEXT 類型時需要注意硬盤容量。
(2) NTEXT
NTEXT 數據類型與TEXT 類型相似, 不同的是NTEXT 類型采用UNICODE 標准字符集 (Character Set) , 因此其理論容量為image個字節。

(3) IMAGE
IMAGE 數據類型用於存儲大量的二進制數據,理論容量為image個字節。 其存儲數據的模式與TEXT數據類型相同。通常用來存儲圖形等( OLE Object Linking and Embedding , 對象連接和嵌入)對象。
在未來的MicrosoftSQL Server 版本中將不再使用TEXT、TEXT 和IMAGE 數據類型, 為了避免在開發過程中出現問題,最好不要使用,可以使用nvarchar(max)、varchar(max) 和varbinary(max)代替。

6. 貨幣數據類型
(1) MONEY
MONEY 數據類型用於存儲貨幣值, 存儲范圍是imageimage,占用8 個字節的存儲空間。
(2) SMALLMONEY
SMALLMONEY 與MONEY 數據類型的作用一致,只是取值范圍更小,取范圍是 -214748.3648 - 214748 .3647 ,占用4 個字節的存儲空間。
7. 位數據類型
bit在SQLServer 2016 中稱為位數據類型,取值范圍是0 或10 bit 類型常用於邏輯判斷, TRUE 為1, FALSE 為0 。
8. 二進制數據類型
(1) BINARY
BINARY(N)是一個固定長度為N 字節的二進制數據類型, 存儲范圍由N 來決定, N 的取 值范圍為1-8000 , 存儲空間為N 字節。為了表示二進制數據,在輸入時需在數據前面加上OX 作為二進制標識,例如輸入OXBB4 代表BB4 。

(2) VARBINARY

VARBINARY 數據類型用來存儲可達8000 字節長的變長的二進制數據。當輸入表的內容 大小可變時,應該使用這種數據類型。
9. 其他數據類型
( 1) ROWVERSION
在SQLServer 2016 中,每一次對數據表的更改, SQLSe凹er 都會更新一個內部的序列數, 這個序列數就保存在ROWVERSION 字段中。所有ROWVERSION 列的值在數據表中是唯一 的,並且每張表中只能有一個包含ROWVERSION 字段的列存在。 使用ROWVERSION 作為數據類型的列,其字段本身的內容是無自身含義的,這種列主 要是作為數據是否被修改過、更新是否成功的作用列。

(2) TIMESTAMP。
TIMESTAMP 時間戳數據類型和ROWVERSION 有一定的相似性,每次插入或更改包含 TIMESTAMP的記錄時, TIMESPAMP的值就會更新,一張表中只能有一個TIMESPAMP列。 在創建表時只需提供數據類型即可,不需要為TIMESTAMP 所在的數據列提供列名:

create table testtable (prikey int  primary keytimestamp )

使用ROWVERSION 時不具備這種特性,如果要為某一列指定為ROWVERSION 數據類 型, 需聲明列名:

image

(3) UNIQUEIDENTIFIER
全局唯一標識符GUID,一般用作主鍵的數據類型,是由硬件地址、CPU 標識、時鍾頻率 所組成的隨機數據,在理論上每次生成的GUID 都是全球獨一無二、不存在重復的。通常在並 發性較強的環境下可以考慮使用。它的優點在於全球唯一性、可對GUID 值隨意修改,但是缺 點也很明顯,檢索速度慢、編碼閱讀性差。

( 4) CURSOR
游標數據類型,該類型的數據用來存放數據庫中選中所包含的行和列,只是一個物理地址 的引用,並不包含索引,用於建立數據集。
(5) SQL_ V ARIANT
用於存儲SQL Server 2016 支持的各種數據類型(不包括四XT 、NTEXT、IMAGE、 TIMESTAMP 和SQL VARIANT) 的值。



4.1.2 用戶自定義數據類型


        在SQLSe凹er 2016 中,除了系統提供的基本數據類型外,用戶還可以根據自己的需求自 定義數據類型。這里要注意的是, 用戶自定義數據類型並不是完全按照自己的意願憑空創造, 而是建立在系統的基礎數據類型之上。用戶在自定義數據類型的時候需要指定該類型的名稱、 所基於的基礎數據類型是否可以為空等。在SQLSe凹er 2016 中可以使用兩種方法來創建自定 義數據類型,下面分別對這兩種方法進行介紹。
1. 使用資源管理器創建
首先連接SQL Server 2016 服務器,創建一個用於測試的數據庫test , 配置參數使用系統 默認的即可。創建自定義數據類型的操作步驟如下:

imageimage

image

image


image

image

image

2 . 使用T-SQ L 語句創建
在SQL Server 2016 中除了能夠使用管理器創建自定義類型之外, 還可以通過存儲過程提 供的sp_addtype 語句來創建,語法規則如下:

image

image

image


sp_addtype ZipCode,'varchar(64)','not null';

用戶定義的數據類型基於在Microsoft SQL Se凹er 中提供的數據類型。當兒個表中必須存 儲同一種數據類型,並且為保證這些列有相同的數據類型、長度和可控性時,可以使用用戶定 義的數據類型。



4.2 使用管理器管理數據表


4.2.1 創建新數據表

在SQL Se凹er 20 1 6 中,使用資源管理器的方法來創建數據表是非常簡單有效的方法,現 在我們要在xsxk 數據庫中創建一張新的數據表dbo.xs , 具體操作步驟如下。

imageimage





4.2.2 添加數據表字段

使用對象資源管理器對己建立好的表添加數據字段的操作非常簡單,例如在dbo.xs 表中 增加一個新的字段, 名稱為【班級】,數據類型為char(10) ,允許空值。在dbo.xs 表上右擊, 在彈出的快捷菜單中選擇【設計】命令,如圖4.10 所示。
在彈出的表設計窗口中添加新的字段【班級】, 並設置數據類型為char(10) ,允許為空值, 如圖4.11 所示。

imageimage


執行上述操作后,【班級】字段添加成功。如果需要繼續添加字段,只需在下一行繼續輸 入字段信息即可。


4.2.3 修改字段數據類型

使用對象資源管理器可以隨時修改己經設定好字段的數據類型。例如,將剛才增加的班級 字段的數據類型更改為nchar(10) ,同樣進入數據表的設計視圖中,單擊數據類型最右邊的下 拉箭頭, 選擇nchar(10)即可,或者直接輸入數據類型名也可以達到相同效果, 如圖4 .1 2 所示。
在更改字段數據類型的時候必須要考慮到數據內容和數據類型匹配的關系,對於己有數據 的表來說,更改數據類型時是有風險的,如果新的數據類型與己存儲的數據內容出現不匹配的 情況,很有可能造成數據丟失,所以在更換數據類型的時候需要先考慮表中的內容,例如將性 別字段的數據類型從ch叫2)更換為int 會出現如圖4.13 所示的提示。

image




4.2.4 重命名數據表

數據表建立完成后,可以隨時對表的名稱進行修改。展開表節點,對需要更改名稱的數據 表右擊,在彈出的快捷菜單中選擇【重命名】命令即可進入編輯狀態, 如圖4.14 所示。進入 編輯狀態后,輸入新的名稱即可,如圖4 .1 5 所示。

image





4.2.5 刪除數據表

image


image



4.3 操作數據約束

         通常在設計一張數據表的時候不僅要對表中所用字段和內容進行考慮,還有一個更加重要 的問題,就是對數據完整性的設計。數據完整性是指數據的精確性和可靠性,防止表中出現不 符合既定設置的數據(非法數據)。這些數據可能是用戶沒有根據規則輸入的數據,也可能是 黑客對於數據庫破解所做出的一些特定嘗試,確保數據的完整性對於整個數據庫系統而言是非 常重要的。
       在SQL Server 2016 中,通常會通過約束的形式來對數據表進行完整性的設置,主要的約 束方式分為5 種,分別是:主鍵約束Cprimary key constraint) 、唯一性約束C unique constraint) 、 檢查約束Ccheck constraint) 、默認約束C default constraint) 和外鍵約束Cforeign key constraint) 。


4.3.1 用主鍵約束防止無效數據


        主鍵約束指的是可以在表中定義一個字段作為表的主要關鍵字,主鍵是表中記錄的唯一性 標識,每個表中只允許一個PRIMARYKEY 約束,並且作為PRIMARY 阻Y 約束的字段不允 許空值。若在一個表中有多個列作為主鍵約束,則一列中的值可以是重復的,但是被主鍵約束 列中的組合值一定要是唯一存在的。
         在SQL Server 2016 中添加約束的方法主要有兩種,一種是通過對象資源管理器來創建, 還有一種則是使用T-SQL 語句來創建。 使用對象資源管理器對學生選課數據庫Cxsxk) 中的學生表Cdbo .xs) 中的學號字段進行 PRIMARY 阻Y 的設定,具體操作如下:

image

image



4.3.2 用性約束防止重復數據


       唯一性約束(UNIQUE) 可以確保數據表在主鍵列中字段的唯一性。保證其中的數值只出 現一次, 而不會出現重復的現象。例如,在員工信息表中需要錄入所有員工的手機號碼,然而 並不可能有兩位員工的手機號碼是相同的,此時我們可以對手機號碼字段進行唯一性約束的設 置。在SQL Server 20 1 6 中可以對一個表中的多個字段進行UNIQUE 約束,在使用UNIQUE 時需要注意以下兒點要素:
• UNIQUE 約束是允許空值的.
• UNIQUE 約束可以在一個數據表中設立多個。
• 使用了UNIQUE 約束的字段會建立唯一性索引.
• 在默認的情況下, UNIQUE 約束創建的是非聚集索引。

使用對象資源管理器對姓名字段進行UNIQUE 約束操作的步驟如下:

imageimageimage




4.3.3 檢查約束


       檢查約束是對錄入到數據表中的數據所設置的檢查條件,以限制輸入值,用於保證數據庫 的完整性。通過邏輯表達式來對字段的值進行輸入內容的限定,例如在員工表中定義了一個 age 字段, 我們需要把這個字段所錄入的內容限定在一個合理及合法的范圍內,比如1 8--70 歲, 可以通過邏輯表達式age>=18 AND age<=70 來進行判斷,邏輯表達式會返回TRUE 或FALSE 兩個值, 用來表示符合約束條件和不符合約束條件兩種情況。通常在使用檢查約束時, 需要注
意以下兒點:
• 在對列進行約束限制時,只能與字段有關;在對表進行約束限定時,只能與限制表中的字段有關.
• 在數據表中可以對多個列進行檢查約束的設直。
• 在使用CREATETABLE 時,只能對每個字段設置一個檢查約束.
• 若在表中對多個字段進行檢查約束,則為表級約束.
• 檢查約束將在數據表進行時SERT 和UPDA四操作時對數據進行驗證.
• 設直檢查約束的時候不能包含子查詢。

使用對象資源管理器對學生選課數據庫(xsxk) 中的學生表(dbo .xs ) 中的性別字段進行 檢查約束的設定,要求只能輸入"男"或"女",具體操作步驟如下:

imageimageimage





4.3.4 默認約束

        默認約束是指當某一字段沒有提供數據內容時,系統自動給該字段賦予一個設定好的值。 當必須向表中加載一行數據但不知道某一字段值的值或該值不存在時,可以使用默認約束。默 認約束可以使用常雀、函數、空值作為默認值。使用默認約束時,需要注意以下兒點:
• 每個字段只能有一個默認約束.
• 若默認約束設直的值大於字段所九許的長度,如l 截取到字段允許長度.
• 不能加入到帶有IDENTπY 屬性或T脅伍STAMP 的字段上。
• 若字段的數據類型為用戶自定義類型,而且已有默認值綁定在此數據類型上,則不允 許再次使用默認值。




4.3.5 外鍵約束

外鍵約束是在兩個表中的數據之間建立和加強鏈接的一列或多列的組合, 可控制在外鍵表 中存儲的數據。在外鍵引用中,當包含一個表的主鍵值的一個或多個列被另一個表中的一個或 多個列引用時,就在這兩個表之間創建了鏈接。使用外鍵約束需要注意以下兒點:
• 外鍵約束是對字段參照完整性的設直。
• 外鍵約束不支持自動創建索引,需要手動建立.
• 表中最多可以使用31 個外鍵約束。
• 臨時表中不能建立外鍵約束.
• 主鍵和外鍵的數據類型必須嚴格匹配。





4.4 小結


4.5 經典習題與面試題



第5章 視 圖

       除在數據庫關系表中定義基本表的結構和編排方式外, SQL 語言還提供了一種數據組織 方法, 可以按其他組織形式對原來表中的數據進行重新組織, 這種方法就是視圖。與表一樣, 視圖包含一系列帶有名稱的列和行數據。視圖在數據庫中並不是以數據值存儲集形式存在 的, 行和列數據來自於由定義視圖的查詢所引用的表, 並且在引用視闖時動態生成。
本章重點內容:
• 了解操作視圖的基本概念及優缺點
• 掌握使用管理器創建、查看、刪除視圖
• 會使用視圖操作數據


5.1 視圖概述

         視圖是一個虛擬表, 其內容由查詢定義。對其中所引用的基礎表來說,視圖的作用類似於 篩選.定義視圖的篩選可以來自當前或其他數據庫的一個或多個表,或者其他視圖。分布式查 詢也可用於定義使用多個異類源數據的視圖。例如,如果有多台不同的服務器分別存儲不同地 區的數據, 而我們需要將這些服務器上結構相似的數據組合起來, 這種方式就很有用。
          視國的結構和內容是通過SQL 查詢獲得的,也稱之為視圖名, 可以永久地保存在數據庫 中。用戶通過SQL 查詢語旬,可以像其他普通關系表一樣, 對視閨中的數據進行查詢。視圖 可以被看成是虛擬表或存儲查詢, 可通過視圖訪問的數據不作為獨特的對象存儲在數據庫內。
          視圖在數據庫內存儲的是SELECT 語旬,即數據庫內並沒有存儲視圖這個表,而存儲的 是視圖的定義。SELECT 語旬的結果集構成視圖所返回的虛擬表。用屍可以用引用表時所使用 的方法在SQL 語句中通過引用視圖名稱來使用虛擬表。使用視圖可以實現下列任一或所有功能:
   (1 )將用戶限定在表中的特定行上。例如,只允許雇員看見工作跟蹤表內記錄其工作的行。
( 2 ) 將用戶限定在特定列上。例如,對於那些不負責處理工資單的雇員, 只允許其看見 雇員表中的姓名列、辦公室列、工作電話列和部門列,而不能看見任何包含工資信息或個人信 息的列。
(3)將多個表中的列連接起來, 使它們看起來像一個表。
( 4 ) 聚合信息而非提供詳細信息。例如,顯示一個列的和,或列的最大值和最小值。

        當數據庫管理系統DBMS 在SQL 語句中遇到視圖引用時,會從數據庫中找出所存儲的相 應視圖的定義,然后把對視圖的引用轉換成對構成視圖源表的等價請求,並且執行這個等價請 求。利用這種方法, DBMS 在保持源表數據完整性的同時也保持了視圖的"可見性"。
         對於簡單視圖, DBMS 通過快速查詢直接從源表中提取並構造出視圖的每一行。而對於 一些比較復雜的視圖, DBMS 則要根據該視圖定義中的查詢語句進行查詢操作,並將結果存 儲到一個臨時表中。然后DBMS 再從這個臨時表中提取數據以滿足對視圖操作的需要, 並在 不需要的時候拋棄所生成的臨時表。但不論DBMS 如何操作,對用戶來講,其結果都是相同 的, 即這個視圖能夠在SQL 語句中引用, 就好像其是一張真正的關系表一樣。
        通過定義SELECT 語旬以檢索將在視圖中顯示的數據來創建視圖。SELECT 語句引用的 數據表稱為視圖的基表。視圖通常用來集中、簡化和自定義每個用戶對數據庫的不同認識。視 圖可用作安全機制,方法是允許用戶通過視圖訪問數據, 而不授予用戶直接訪問視圖基礎表的 權限。視圖可用於提供向后兼容接口來模擬曾經存在但其架構己更改的表。還可以在向SQL Server 復制數據和從其中復制數據時使用視圖,以便提高性能並對數據進行分區。


5.1.1 視圖的類型

        除了基本用戶定義視圖的標准角色以外, SQL Server 2016 還提供了下列類型的視圖,這 些視圖在數據庫中起着特殊的作用。
(1)索引視圖
          索引視圖是被具體化了的視圖。這意味着已經對視圖定義進行了計算並且生成的數據像表 一樣存儲,用戶可以為視圖創建索引, 即對視圖創建一個唯一的聚集索引。索引視圖可以顯著 提高某些類型查詢的性能,尤其適於聚合許多行的查詢,但不太適於經常更新的基本數據集。
(2) 分區視圖
           分區視圖在一台或多台服務器間水平連接一組成員表中的分區數據,使數據看上去如同來 自於一個表。需要注意的是, 連接同一個SQL Server 2016 實例中成員表的視圖就是一個本地 分區視圖。
(3)系統視圖
          系統視圖包含目錄元數據,可以使用系統視圖返回與SQL 如何er 實例或在該實例中定義 的對象有關的信息。例如,可以查詢sys.databases 目錄視圖以便返回實例中提供的用戶定義數 據庫有關的信息。




5.1.2 視圖的優缺點

        在數據庫中使用視圖有很多優點, 尤其是在定義用戶使用的數據庫結構和增強數據庫的安 全保密性方面,視圖起了准則作用。使用視圖的主要優點是:
(1) 安全保密性。通過視圖,用戶只能查詢和修改他們所能見到的數據,數據庫中的其 他數據則既看不見也取不到。數據庫授權命令可以使每個用戶對數據庫的檢索限制到特定的數據庫對象上,但不能授權到數據庫特定行和特定的列上。通過視圖,用戶可以被限制在數據的 不同子集上。
(2) 查詢簡單性。視圖能夠從兒個不同的關系表中提取數據,並且用一個單表表示出來, 利用視圖將多表查詢轉換成視圖的單表查詢。
(3)結構簡單性。視圖能夠給用戶一個"個人化"的數據庫結構外觀,用一組用戶感興 趣的可見表來代表這個數據庫的內容。
( 4 ) 隔離變化。視圖能夠代表一個個一致的、非變化的數據。即使是在作為視圖基礎的 源表被分隔、重新構造或者重新命名的情況下,也是如此。
(5) 數據完整性。如果數據被存取,並通過視圖來輸入, DBMS 就能夠自動地校驗這個 數據,以便確保數據滿足所規定的完整性約束。
(6) 邏輯數據獨立性。視圖可以使應用程序和數據庫表在一定程度上獨立。如果沒有視 圖,應用一定是建立在表上的。有了視圖之后,程序可以建立在視圖之上, 從而使程序與數據 庫表被視圖分隔開來。
雖然視圖存在上述的優點,但是在定義數據庫對象時不能不加選擇地來定義視圖,因為視 圖也存在一些缺點,主要如下:


        雖然視圖存在上述的優點,但是在定義數據庫對象時不能不加選擇地來定義視圖,因為視 圖也存在一些缺點,主要如下:
(1)性能。數據庫管理系統必須把視圖的查詢轉化成對基本表的查詢,如果這個視圖是 由一個復雜的多表查詢所定義的,那么即使是對視圖的一個簡單查詢,數據庫管理系統也會將 其變成一個復雜的結合體,需要花費一定的時間。
(2) 修改限制。當用戶試圖修改視圖的某些記錄行時,數據庫管理系統必須將其轉化為 對基本表的某些行的修改。對於簡單視圖來說,這是很方便的,但是對於比較復雜的視圖,可 能是不可修改的。

image




5.2 使用管理器管理視圖

用戶可以使用SQL Server Management Studio 或T-SQL 在SQLSe凹er 20 1 6 中創建視圖, 將視圖用於以下用途:
(1)集中、簡化和自定義每個用戶對數據庫的認識。
(2) 用作安全機制,方法是允許用戶通過視圖訪問數據,而不授予用戶直接訪問底層基 表的權限。
(3)提供向后兼容接口來模擬架構己更改的表。


5.2.1 創建新視圖

        在數據庫中創建了一個或者多個表之后, 就可以創建視圖了, 可以使用視圖這種數據庫對 象以指定的方式查詢一個或者多個表中的數據。
(1)限制和局限:只能在當前數據庫中創建視圖,視圖最多可以包含1024 列。
(2) 權限:要求在數據庫中具有CREATEVIEW 權限,並具有在其中創建視圖的架構的 ALTER 權限。
使用查詢和視圖設計器創建視圖的步驟如下:

image

imageimageimageimage







5.2.2 查看視圖信息

1 . 查詢和視圖設計器工具
        當打開視圖的定義、顯示查詢或視圖的結果或者創建或打開查詢時,查詢和視圖設計器將 會打開。它由4 個不同的窗格組成:
(1) 【關系圖】窗格以圖形形式顯示通過數據連接選擇的表或表值對象, 同時也會顯示 它們之間的連接關系。
(2) 【條件】窗格用於指定查詢選項(例如要顯示哪些數據列、如何對結果進行排序,以 及選擇哪些行等) , 可以通過將選擇輸入到一個類似電子表格的網格中來進行指定。
(3)用戶可以使用SQL 窗格創建自己的SQL 語旬, 也可以使用【條件】窗格和【關系 圖】窗格創建語旬,在后面這種情況下將在SQL 窗格中相應地創建SQL 語句。生成查詢時, SQL 窗格將自動更新並重新設置格式以便於閱讀。
( 4 ) 【結果】窗格顯示最近執行的選擇查詢的結果。

        這些窗格對於處理查詢和視圖非常有用。當用戶打開一個視圖或查詢時,以上部分或全部 窗格將隨之打開。所打開的窗格取決於【選項】對話框中的設置以及用戶所連接的數據庫管理 系統,默認設置是4 個窗格全都打開。
在對象資源管理器中, 右擊要打開的視圖,然后單擊【設計】菜單項或【打開視圖】菜單 項即可打開視圖, 如圖5.6 所示。

image


2. 【關系圄】窗格

      【關系圖】窗格以圖形形式顯示用戶通過數據連接選擇的表或表值對象, 同時也會顯示它 們之間的連接關系。在【關系圖】窗格中可以進行的操作包括添加或移除表和表值對象, 並指 定要輸出的數據列和創建或修改表和表值對象之間的連接。

       當在【關系圖】窗格中進行更改時, 【條件】窗格和SQL 窗格會自動更新以反映所做的 更改。例如, 如果在【關系圖】窗格內的表或表值對象窗口中選擇某個要輸出的列, 查詢和視 圖設計器會將該數據列添加到【條件】窗格中以及SQL 窗格內的SQL 語句中。
         每個表或表值對象在【關系圖】窗格中均作為單獨的窗口出現。每個矩形的標題欄中的圖 標表示該矩形所代表的對象類型, 如表5 .1所示。

image


(1)表
         列出可以添加到【關系圖】窗格中的表。若要添加某個衰, 則選擇該表, 再單擊【添加】 菜單項。若要同時添加多個表, 可以先選擇這些表, 再單擊【添加】菜單項。
(2) 視圖
        列出可以添加到【關系圖】窗格中的視圖。若要添加某個視圖, 則選擇該視圖, 再單擊【添 加】菜單項。若要同時添加多個視圖, 可以先選擇這些視圖, 再單擊【添加】命令。
(3)函數
      列出可以添加到【關系圖】窗格中的用戶定義的函數。若要添加某個函數, 則選擇該函數, 再單擊【添加】命令。若要同時添加多個函數, 可以先選定這些函數, 再單擊【添加】命令。
( 4 ) 本地表
     列出由查詢創建的表而不是數據庫中的表。
( 5 ) 同義詞
     列出可以添加到【關系圖】窗格中的同義詞。若要添加某個同義詞,則選擇該同義詞, 再 單擊【添加】命令。若要同時添加多個同義詞,可以先選擇這些同義詞, 再單擊【添加】命令。

image

      連接線中間的圖標形狀指示表或表結構對象的連接方式。若連接子句使用等於( =)以外 的運算符, 則該運算符將顯示在連接線圖標中。在連接線中顯示的圖標如表5 .2所示。

imageimage


3. 【條件】窗格
        【條件】窗格用於指定查詢選項(例如要顯示哪些數據列、如何對結果進行排序以及選擇 哪些行等) , 可以通過將選擇輸入到一個類似電子表格的網格中來進行指定。在【條件】窗格 中,可以指定:
• 要顯示的列以及列名別名.
• 要顯示的所屬的表.
• 計算列的表達式。
• 查詢的排序順序.
• 搜索條件。
• 分組條件,包括用於摘要報告的聚合函數.
• UPDATE 或的INSERT 劇TO 查詢的新值。
• INSERTFROM 查詢的目標列名.
在【條件】窗格中所做的更改將自動反映到【關系圖】窗格和SQL 窗格中。同樣, 【條 件】窗格也會自動更新以反映在其他窗格中所做的更改。

4.SQL 窗格
        可以使用SQL 窗格創建自己的SQL 語句,也可以使用【條件】窗格和【關系圖】窗格創 建語旬,在后面這種情況下將在SQL 窗格中相應地創建SQL 語句。生成查詢時, SQL 窗格將 自動更新並重新設置格式以便於閱讀。
       若要打開SQL 窗格,可以首先打開查詢和視圖設計器(在服務器資源管理器中選擇相應 的數據庫對象后,在【數據庫】菜單中單擊【新建查詢】) ,然后在【查詢設計器】菜單中指 向【窗格】,再單擊【SQL 】。在SQL 窗格中,可以進行以下操作:
(1)通過輸入SQL 語句創建新查詢。
(2) 根據在【關系圖】窗格和【條件】窗格中進行的設置,對查詢和視圖設計器創建的 SQL 語句進行修改。
(3)輸入語旬以利用所使用數據庫的特有功能。


5. 【結果】窗格
【結果】窗格顯示最近執行的SELECT 查詢的結果(其他查詢類型的結果在消息框中顯 示)。若要打開【結果】窗格,可以打開或創建一個查詢或視圖,或者返回某個表的數據。如 果默認情況下不顯示【結果】窗格,可以在【查詢設計器】菜單中指向【窗格) ,再單擊【結 果】命令。用戶可以在【結果】窗格中執行的操作如下:
(1)在類似於電子表格的網格中查看最近執行的SELECT 查詢的結果集。
(2) 對於顯示單個表或視圖中的數據的查詢或視圖,可以編輯結果集中各個列的值、添 加新行以及刪除現有的行。

6.SQ L 編輯器

     使用SQL 編輯器可以編輯現有的存儲過程、函數、觸發器和SQL 腳本。當用戶打開上述 任何對象時,此窗口將打開。若要創建要對數據源運行的新的SQL 語旬,可以使用查詢設計 器的SQL 窗格。SQL 編輯器提供了許多有用的SQL 文本編輯功能,包括:
(1)對SQL 關鍵字進行顏色編碼, 以最大限度地減少語法和拼寫錯誤。
(2) 生成主干存儲過程和觸發器。
(3)提供有用的編輯功能,包括剪切、復制、粘貼和拖動操作。
(4) 更改編輯器的行為(通過在【工具】菜單中選擇【選項】)以修改虛空格、自動換
行、行號和制表符大小。
(5) 幫助管理調試斷點。
7. 獲取有關視圖的信息
在SQL Se凹er 2016 中,通過使用SQL Server Management Studio 或T-SQL 可以獲取有關 視圖的定義或屬性的信息。

(1)使用對象資源管理器獲取視圖屬性
使用對象資源管理器獲取視圖屬性的步驟為:在【對象資源管理器】中,單擊包含要查看 屬性的視圖的數據庫旁邊的加號,單擊加號以展開【視圖】文件夾, 然后右擊要查看其屬性的 視圖, 選擇【屬性】菜單項,打開如圖5 .7 所示的【視圖屬性】對話框。

imageimage

【視圖屬性】對話框中顯示以下屬性。
• 服務器:當前服務器實例的名稱.
• 數據庫:包含此視圖的數據庫的名稱.
• 用戶:此,連接的用戶名。
• Schema: 顯示視,困所屬的架構.
• 創建日期:顯示視,圖的創建日期.
• 名稱:當前視圖的名稱。
• 系統對象:指示視,因是否為系統對象,值為True 和False .
• ANSl NULL: 指示創建對象時是否選擇了ANSl NULL 選項. • 帶引號的標識符:指示創建對象時是否選擇了【帶引號的標識符】選項. • 架構已綁定:指示視圖是否綁定到架構,值為True 和False 。
• 己加密:指示視,圖是否已加密,值為True 和False .


(2) 使用視圖設計器工具獲取視圖屬性
①在【對象資源管理器】中,展開包含要查看屬性的視圖的數據庫,然后展開【視圖】 文件夾。
②右擊要查看其屬性的視圖,然后選擇【設計】菜單項。

③右擊【關系圖】窗格中的空白區域,再單擊【屬性】命令,出現如圖5 . 8 所示的【屬 性】窗格。

image

【屬性】窗格中顯示以下屬性。

  • (名稱):當前視圖的名稱。
  • 服務器名稱:當前服務器實例的名稱.
  • 架構:顯示視,圖所屬的架構。
  • 數據庫名稱:包含此視圖的數據庫的名稱.
  • 說明:對當前視圖的簡短說明.
  • GROUPBY 擴展:指定對於基於聚合查詢的視圖,附加選項可用.
  • SQL 注釋:顯示SQL 語句的說明. 若要查看或編輯完整的說明,可以單擊相應的說明, 再單擊屬性右側的省略號( ... ) 。注釋可以包含視圖使用者和使用時間等信息.
  • Top 規范:展開此項可顯示Top、"百分比" <<表達式"和"等同值"屬性。);

         > Top: 指定視,圖將包括TOP 於句,該於句只返回結果集中的前n 行或前百分之n行。默認情況下,視圖將在結果集中返回前10 行。使用此,項可更改返回的行數或指定不同的百分比.

        > 表達式:顯示視圖將返回的百分比(如果"百分比"設直為"是"果"百分比"設直為"否" ) .
        >百分比:指定查詢將包含一個TOP 子句,僅返回結果集中前百分之n 行。
        >等同值:指定視圖將包括WITHTIES 於句。如果視圖包含ORDERBY 子句和基於百分比的TOP 於句, WITH TIES 將非常有用. 若設直了該選項,並且百分比截止住直在一組行的中間,且這些行在ORDER BY 子句中具有相同的佳,貝1)視
圖將會擴展,以包含所有這樣的行。

  • 綁定到架構:防止用戶以會使視圖定義失效的任何方式修改影響此視圖的基礎對象.
  • 非重復值:指定查詢將在視圖中篩選出重復值.當只使用表中的部分列並且這些列可能包含重復佳時,或者當連接兩個或更多表的過程會在結果集中產生重復行時,此選 項非常有用.選擇該選項等效於向SQL 窗格內的語句中插入關鍵字DISTINCT。
  • 更新規范:展開此項可顯示"使用視圖規則更新"和"Check 選項"屬性。
  • 輸出所有列:顯示所有列是否都由所選視圖返回.這是在創建視圖時設直的.





5.2.3 創建基於視圖的視圖

image







5.2.4 刪除視圖


當一個視圖不再需要時,可以將其從數據庫中刪除, 以回收當前使用的磁盤空間。這樣數 據庫中的任何對象都可以使用此回收空間。
(1)限制和局限: 刪除視圖時,將從系統目錄中刪除視圖的定義和有關視圖的其他信息。還將刪除視圖的所有權限。使用DROP TABLE 刪除的表上的任何視圖都必須使用DROP VIEW 顯式刪除。
(2) 權限: 需要有對SCHEMA 的ALTER 權限或對OBJECT 的CONTROL 權限。

從數據庫中刪除視圖的步驟如下:

image

image




5.3 通過視圖操作數據



由於視圖是一張虛表, 對視圖的更新最終實際上是轉換成對視圖的基本表的更新, 因此可 以通過更新視圖的方式實現對表中數據的更新。視圖的更新操作包括插入、修改和刪除數據, 可以使用SQL Server Management Studio 或T-SQL 在SQL Server 2016 中修改基礎表的數據。


5.3.1 在視圖中插入數據記錄

        在通過視圖插入數據時,必須保證未顯示的列有值,該值可以是默認值或NULL 值。假設在飯blel 上創建了一個視圖, tablel 有cl 、c2 和c3 三列,視圖創建在cl 和c2 上。那么, 通過視圖對table l 插入數據時,必須保證c3 有值(可以是默認值或NULL 值) ,否則不能向 視圖中插入行。
具體來說, 在視圖中插入數據記錄,其實質是向構成視圖的基本表中插入數據, 具體操作 步驟如下:

image

image



5.3.2 在視圖中修改數據記錄

image




5.3.3 在視圖中刪除數據記錄

imageimage


    本章就視圖做了概要介紹,首先簡要介紹了其基本概念、類型和優缺點,然后重點講解了 如何使用管理器管理視圖,包括創建新視圖、查看視圖信息、創建基於視圖的視圖及刪除視圖, 最后演示了在視圖中插入、修改和刪除表數據。學習本章要注意視圖的操作與基本表的操作之 間的相似和不同之處。



5.4 小結


5.5 經典習題與面試題



第6章 SQL Server 2016數據庫管理

    SQL Server 2016 數據庫的管理主要包括脫機與聯機數據庫、分離和附加數據庫、導入導 出數據、備份和恢復數據庫、收縮數據庫和文件以及生戚與執行SQL 腳本等操作。這些操作 都可以通過SQL Server Managernent Studio 工具來完成。
      Managernent Studio 工具有一個圖形用戶界面,用於創建數據庫和數據庫中的對象。 Management Stud io 還具有一個查詢編輯器,用於通過編寫下SQL 語句與數據庫進行交互。 Management studio 可以從SQL Server 安裝磁盤進行安裝,也可以從MSDN 中下載。本章主要 講解如何使用SQL Server Management Studio 維護管理數據庫。
本章重點內容:
• 掌握脫機數據庫和聯機數據庫
• 掌握分離數據庫和附加數據庫
• 會導入導出數據
• 會備份和恢復數據庫
• 掌握收縮數據庫和文件
• 掌握生成與執行SQL 腳本


6.1 數據庫聯機

    數據庫總是處於一個特定的狀態中,這些狀態包括ONL1NE、OFFLINE 或SUSPECT 等, 如表6. 1 所示。若要確認數據庫的當前狀態, 可以選擇sys.da tabases 目錄視圖中的state desc 列或DATABASEPROPERTYEX 函數中的Status 屬性。

imageimage


6.1.1 脫機數據庫

        脫機與聯機是針對數據庫的當前狀態來說的, 當一個數據庫處於可操作、可查詢的狀態時 就是聯機狀態, 而一個數據庫盡管可以看到其名字出現在數據庫節點中, 但對其不能執行任何 有效的數據庫操作時就是脫機狀態。
        脫機和聯機數據庫到底有什么意義呢?在數據庫管理及軟件開發過程中經常會出現對當 前數據庫進行遷移的操作, 而在聯機狀態下, SQL Se凹erMan艷ement Studio 工具是不允許復 制數據庫文件的。例如, 把當前開發版本的數據庫同步到產品版本的數據庫, 就可以通過這種 操作完成, 而通過可視化命令則是非常便捷的方式之一。
      當在數據庫復制過程中需要暫停當前的聯機數據庫時, 就可以通過右擊, 選擇快捷菜單中 的【任務】| 【脫機】命令來完成, 如圖6. 1 所示。

image




6.1.2 聯機數據庫

    完成對脫機狀態的數據庫復制后,要將其恢復為可用狀態,可以右擊,通過【任務】| 【聯 機】命令來完成。圖6.2 展示如何使用【聯機】命令來實現數據庫聯機。

  image







6.2 分離和附加數據庫

        如果要將數據庫更改到同一計算機的不同SQL Server 實例或要移動數據庫,分離和附加 數據庫會很有用。用戶可以分離數據庫的數據和事務日志文件,然后將它們重新附加到同一或 其他SQLServer 實例。
         在64 位和32 位環境中, SQLSe凹er 磁盤存儲格式均相同。因此,可以將32 位環境中的 數據庫附加到64 位環境中,反之亦然。從運行在某個環境中的服務器實例上分離的數據庫可 以附加到運行在另一個環境中的服務器實例。

image

6.2.1 分離數據庫


        分離數據庫是指將數據庫從SQL Server 實例中刪除, 但使數據庫在其數據文件和事務日 志文件中保持不變。之后,就可以使用這些文件將數據庫附加到任何SQL Server 實例,包括 分離該數據庫的服務器。如果存在下列任何情況,就不能分離數據庫。
( 1 ) 己復制並發布的數據庫。如果進行復制,數據庫就必須是未發布的。必須通過運行 sp_replic創iondboption 禁用發布后,才能分離數據庫。
(2) 數據庫中存在數據庫快照。必須首先刪除所有數據庫快照,然后才能分離數據庫。

(3)該數據庫正在某個數據庫鏡像會話中進行鏡像。除非終止該會話,否則無法分離該 數據庫。
(4) 數據庫處於可疑狀態。
( 5) 該數據庫是系統數據庫。
確定了能夠分離數據庫后,用戶可以通過SQL Se凹erMan唔ement Studio 進行分離,其具 體操作步驟如下。

image

image


image

imageimage

imageimage



6.2.2 附加數據庫

      通過SQL Server Management Studio ,用戶同樣可以附加復制的或分離的SQLServer 數據 庫。例如,當將包含全文目錄文件的SQL Server 2005 數據庫附加到SQL Server 20 1 6 服務器實 例上時, 系統會將目錄文件從其以前的位置與其他數據庫文件一起附加,這與在SQL Server 2005 中的情況相同。

image

        附加日志文件的要求在某些方面取決於數據庫是讀寫的還是只讀的。如果讀寫數據庫具有 單個日志文件,並且沒有為該日志文件指定新位置,附加操作將在舊位置中查找該文件。如果 找到了舊日志文件,無論數據庫上次是否完全關閉,都將使用該文件。但是,若來找到舊文件 日志,數據庫上次是完全關閉且現在沒有活動日志鏈,則附加操作將嘗試為數據庫創建新的日 志文件。
        反之,若附加的主數據文件是只讀的,則數據庫引擎假定數據庫也是只讀的。對於只讀數 據庫,日志文件在數據庫主文件中指定的位置上必須可用。因為SQL Server 2016 無法更新主 文件中存儲的日志位置,所以無法生成新的日志文件。
      從上述內容可以看出, 用戶試圖附加SQLSe凹er 2016 數據庫前,必須具備一定的先決條 件,具體如下:
(1)必須首先分離數據庫。任何嘗試附加未分離的數據庫都將返回錯誤。

( 2 ) 附加數據庫時,所有數據文件( MDF 文件和LDF 文件) 都必須可用。若任何數據 文件的路徑不同於首次創建數據庫或上次附加數據庫時的路徑,則必須指定文件的當前路徑。
(3 )在附加數據庫時,如果MDF 和四F 文件位於不同目錄並且其中一條路徑包含 \\?\GlobalRoot,該操作將失敗。 具備了如上先決條件后,用戶就可以開始附加數據庫到指定目標上了,其具體操作步驟如下:

image


image

imageimage

image

imageimage








6.3 導入導出數據

      導入導出數據也是數據庫操作中使用頻繁的功能。SQL Server 20 1 6 的導入和導出向導可 以將數據復制到提供托管NET Frarnework 數據訪問接口或本機OLEDB 訪問接口的任何數據 源,也可以從這些數據源復制數據。
        用戶可以訪問接口的列表,數據源包括SQL Server、平面文件、Microso負Office Access、 Microso負Office Excel 。若要成功完成SQL Server 導入和導出向導,則必須至少具有下列權限:
(1 )連接到源數據庫和目標數據庫或文件共辜的權限。該權限在Integration Services 中, 需要服務器和數據庫的登錄權限。

(2) 從源數據庫或文件中讀取數據的權限。在SQL Se凹er 2016 中,這需要對源表和視圖 具有SELECT 權限。

(3)向目標數據庫或文件寫入數據的權限。在SQL Se凹er 2016 中,這需要對目標表具有 劇SERT 權限。
( 4 ) 如果希望創建新的目標數據庫、表或文件,就需要具有創建新的數據庫、表或文 件的足夠權限。在SQL Server 20 1 6 中,需要具有CREATE DATAB AS E 或CRE ATE TABLE 權限。
( 5 ) 如果希望保存向導創建的包,就需要具有向msdb 系統或文件系統進行寫入操作的 足夠權限。



6.3.1 導入SQL Server數據表


     SQL Server 20 1 6 的導入導出服務可以實現不同類型的數據庫系統的數據轉換。為了讓用 戶可以更直觀地使用導入導出服務, Microsoft 提供了導入導出向導。導入和導出向導提供了 一種從源向目標復制數據的簡便方法,可以在多種常用數據格式之間轉換數據,還可以創建目 標數據庫和插入表。
     用戶可以向這些源中復制數據或從其中復制數據: SQL Server、文本文件、Access、Excel 、 其他OLEDB 訪問接口。這些數據源既可用作源,又可用作目標。還可將ADO.NET 訪問接口 用作源。指定源和目標后, 便可選擇要導入或導出的數據, 用戶可以根據源和目標類型,設置 不同的向導選項。
    例如,若在SQL Se凹er 數據庫之間復制數據,則指定要從中復制數據的表,或提供用來 選擇數據的SQL 語句。具體來說,導入SQL Server 數據表的操作步驟如下:

image

imageimage


image

image


image


image


image

image



6.3.2 導入其他數據源的數據

     導入其他數據源的數據與6 .3 .1 節中的過程相似, 在選擇數據源的步驟中選擇不同的數據 源,比如導入Excel 數據, 就在數據源選項中選擇Microsoft Excel,如圖6.10 所示。其他數據 源同樣在數據源下拉列表中選擇。

image



6.3.3 導出SQL Server數據表

     SQL Server 20 16 中導出數據功能跟導入數據相似,該功能實現將SQLSe凹er 201 6 中的數據導出為指定格式,其具體操作步驟如下:

 image

image

image

image


image

image

image

image


image

image

image

image






6.4 備份和恢復數據庫

      在一些對數據可靠性要求很高的行業(如銀行、證券、電信等) ,如果發生意外停機或數 據丟失, 其損失會十分慘重。為此,數據庫管理員應針對具體的業務要求制定詳細的數據庫備 份與災難恢復策略, 並通過模擬故障對每種可能的情況進行嚴格測試,只有這樣才能保證數據 的高可用性。數據庫的備份是一個長期的過程,而恢復只在發生事故后進行,恢復可以看作是備份的逆過程,恢復程度的好壞很大程度上依賴於備份的情況。此外,數據庫管理員在恢復時 采取的步驟正確與否也直接影響最終的恢復結果。



6.4.1 備份類型


        備份數據庫是指對數據庫或事務日志進行復制,當系統、磁盤或數據庫文件損壞時, 可以 使用備份文件進行恢復,防止數據丟失。SQLSe凹er 數據庫備份支持以下幾種類型,分別應用 於不同的場合, 下面簡要介紹。
(1 )僅復制備份( Copy-Only Backup)
獨立於正常SQL Server 備份序列的特殊用途備份。
(2) 數據備份( Data Backup)
完整數據庫的數據備份(數據庫備份) 、部分數據庫的數據備份(部分備份)或一組數據 文件或文件組的備份(文件備份〉。
(3)數據庫備份( Database Backup)
數據庫的備份。完整數據庫備份表示備份完成時的整個數據庫。差異數據庫備份只包含自 最近完整備份以來對數據庫所做的更改。

( 4 ) 差異備份( Differential Backup)
基於完整數據庫或部分數據庫以及一組數據文件或文件組的最新完整備份的數據備份 ( {( 差異基准" ) ,僅包含自差異基准以來發生了更改的數據區。部分差異備份僅記錄自上一 次部分備份(稱為" 差異基准" )以來文件組中發生更改的數據區。
( 5 ) 完整備份( Full Backup)
一種數據備份,包含特定數據庫或者一組特定的文件組或文件中的所有數據,以及可以恢 復這些數據的足夠的日志。
(6) 日志備份( Log Backup)
包括以前日志備份中未備份的所有日志記錄的事務日志備份, 完整恢復模式。
( 7 ) 文件備份( File Backup)
一個或多個數據庫文件或文件組的備份。
(8) 部分備份( Partial Backup)
僅包含數據庫中部分文件組的數據(包含主要文件組、每個讀/寫文件組以及任何可選指 定的只讀文件中的數據〉。





6.4.2 恢復模式

      恢復模式旨在控制事務日志維護, 提供給用戶選擇。SQL Server 20 1 6 有3 種恢復模式:簡單恢復模式、完全恢復模式和大容量日志恢復模式。通常,數據庫使用完全恢復模式或簡單恢復模式。

(1)簡單恢復模式
        簡單恢復模式可以最大限度地減少事務日志的管理開銷,因為它不備份事務日志。若數據 庫損壞,則簡單恢復模式將面臨極大的工作丟失風險。數據只能恢復到己丟失數據的最新備份。此, 在簡單恢復模式下, 備份間隔應盡可能短, 以防止大量丟失數據。但是,間隔的長度應該足以避免備份開銷影響生產工作。在備份策略中加入差異備份可有助於減少開銷。
       通常,對於用戶數據庫,簡單恢復模式用於測試和開發數據庫,或用於主要包含只讀數據 的數據庫(如數據倉庫)。簡單恢復模式並不適合生產系統,因為對生產系統而言,丟失最新 的更改是無法接受的,在這種情況下建議使用完全恢復模式。
(2) 完全恢復模式和大容量日志恢復模式
        相對於簡單恢復模式而言, 完全恢復模式和大容量日志恢復模式提供了更強的數據保護功 能。這些恢復模式基於備份事務日志來提供完整的可恢復性及在最大范圍的故障情形內防止丟 失工作。

     ①完全恢復模式
       完全恢復模式需要日志備份。此模式完整記錄所有事務, 並將事務日志記錄保留到對其備 份完畢為止。如果能夠在出現故障后備份日志尾部,就可以使用完全恢復模式將數據庫恢復到 故障點。完全恢復模式也支持還原單個數據頁。
      ②大容量日志恢復模式
      大容量日志記錄大多數大容量;操作, 它只用作完全恢復模式的附加模式。對於某些大規模 大容量操作(如大容量導入或索引創建) , 暫時切換到大容量日志恢復模式可提高性能並減少 日志空間使用量。與完全恢復模式相同,大容量日志恢復模式也將事務日志記錄保留到對其備 份完畢為止。



6.4.3 備份數據庫

   為方使用戶, SQL Server 20 1 6 支持用戶在數據庫在線並且正在使用時進行備份。但是, 存在下列限制:
(1 )無法備份脫機數據。

    隱式或顯式引用脫機數據的任何備份操作都會失敗。通常, 即 使一個或多個數據文件不可用,日志備份也會成功。

image

(2) 備份過程中的並發限制。

數據庫仍在使用時, SQL Server 可以使用聯機備份過程來 備份數據庫。在備份過程中,可以進行多個操作。例如,在執行備份操作期間允許使用劇SERT、 UPDATE 或DELEfE 語句。但是, 若在正在創建或刪除數據庫文件時嘗試啟動備份操作,則 備份操作將等待, 直到創建或刪除操作完成或者備份超時。
如果備份操作與文件管理操作或收縮操作重疊,就會產生沖突。無論哪個沖突操作首先開 始,第二個操作總會等待第一個操作設置的鎖超時(超時期限由會話超時設置控制) 。如果在 超時期限內釋放鎖,第二個操作將繼續執行。若鎖超時,則第二個操作失敗。
一般來說, 在SQL Server 2016 中可以通過SQL Server Management Studio 工具實現備份, 其主要操作流程如下:

image

image


image

image


image







6.4.4 恢復數據庫

     數據庫完整還原的目的是還原整個數據庫。整個數據庫在還原期間處於脫機狀態。在數據 庫的任何部分變為聯機之前, 必須將所有數據恢復到同一點,即數據庫的所有部分都處於同一 時間點並且不存在未提交的事務。在簡單恢復模式下,數據庫不能還原到特定備份中的特定時 間點。
      在完整恢復模式下, 還原數據備份之后,必須還原所有后續的事務日志備份,然后恢復數 據庫。我們可以將數據庫還原到這些日志備份之一的特定恢復點。恢復點可以是特定的日期和 時間、標記的事務或日志序列號。還原數據庫時,特別是在完整恢復模式或大容量日志恢復模 式下,應使用一個還原順序。


image

與備份數據庫類似,用戶可以通過SQL 如何er Management Studio 工具的對象資源管理器 來實現恢復數據庫,其主要操作流程如下:

imageimage


image





6.5 收縮數據庫和文件

   當數據庫隨着使用時間而越來越大時,可以考慮對數據庫進行收縮操作。收縮數據文件通 過將數據頁從文件末尾移動到更靠近文件開頭的來占用的空間來恢復空間,在文件末尾創建足 夠的可用空間后,可以取消對文件末尾的數據頁的分配並將它們返回給文件系統。


6.5.1 自動收縮數據庫

    SQL Server 20 16 支持系統自動收縮數據庫和用戶手動收縮數據庫這兩種方式。為提高數 據庫的使用空間, SQL Se凹er 2016 會尋找可用的數據庫並找出第一個配置為自動收縮的數據
庫,它將檢查該數據庫,並在需要時收縮該數據庫。 待一個數據庫收縮完成后,系統會等待幾分鍾再檢查下一個配置為自動收縮的數據庫。換 句話說, SQL Server 不會同時檢查所有數據庫,也不會同時收縮所有數據庫。它將以循環方式
處理各個數據庫,以便負載在時間上錯開。
如果用戶需要SQL Server 20 16 系統自動對數據庫進行收縮,只需為該數據庫設置自動收縮功能即可,其操作方式為:右擊選擇的數據庫,選擇【屬性】| 【選項】菜單項, 在彈出的 數據庫屬性界面中設置自動收縮為True,如圖6.18 所示。

imageimage




6.5.2 手動收縮數據庫

除了自動收縮外,用戶也可以手動對指定的數據庫進行收縮。但手動收縮數據庫有一定的 限制和局限,主要表現在如下兒方面:
(1)收縮后的數據庫不能小於數據庫的最小大小。最小大小是在數據庫最初創建時指定 的大小,或者上一次使用文件大小更改操作(如DBCC SHR劇KFILE ) 設置的大小。例如, 若數據庫最初創建時的大小為10MB ,后來增長到100 MB ,則該數據庫最小只能收縮到10MB , 即使己經刪除數據庫的所有數據也是如此。
(2) 不能在備份數據庫時收縮數據庫。反之,也不能在數據庫執行收縮操作時備份數據庫。
(3)遇到內存優化的列存儲索引時, DBCC SHR劇KDATABASE 操作將會失敗。遇到 columnstore 索引之前完成的工作將會成功,因此數據庫可能會較小。若要完成DBCC SHR劇KDATABASE,則需要在執行DBCCS~ATABASE 前禁用所有列存儲索引,然 后重新生成列存儲索引。
手動收縮數據庫可以在SQL Server Management Studio 工具的對象資源管理器中完成,其 具體實現步驟如下:

imageimage


imageimage


在收縮數據庫界面展示的是數據庫xsxk 的基本信息,如果需要進行收縮操作, 需要 首先選中【在釋放未使用的空間前重新組織文件。選中此選項可能會影響性能(R) o 】復 選框, 然后在【收縮后文件中的最大可用空間1 中選擇收縮后的空間。然后單擊【確定】 按鈕即可。



6.6 生成與執行SQL腳本

本節主要講解將數據庫生成SQL 腳本、將數據表生成SQL 腳本及執行SQL 腳本3 方面 的操作過程

6.6.1 將數據庫生成SQL腳本

     使用對象資源管理器可以快速創建整個數據庫的腳本,也可以使用默認選項創建單個數據 庫對象的腳本。用戶可以在查詢編輯器窗口中對文件或剪貼板創建腳本,腳本以Unicode 格式 創建。用戶也可以創建用於創建或刪除對象的腳本。有些對象類型具有其他腳本選項, 如 ALTER、SELECT、劇SERT... UPDATE、DELETE 和EXECUTE 操作。
      有時可能需要使用具有多個選項的腳本,如刪除一個過程然后創建一個過程, 或者創建一 個表然后更改一個表。若要創建組合的腳本,可將第一個腳本保存到查詢編輯器窗口中, 並將 第二個腳本保存到剪貼板上, 這樣就可以在窗口中將第二個腳本粘貼到第一個腳本之后。為某 個對象編寫腳本的步驟如下。

image

image

image

image

imageimageimage


image





6.6.2 將數據表生成SQL腳本

     SQLServer 同樣也支持將數據表生成SQL 腳本。在數據庫中選擇數據表並右擊,選擇【編 寫表腳本為】菜單項,有常用的SQL 腳本,包括C阻ATE、DROP 、SELECT、劇SERT、UPDATE 和DELETE , 並且可以將腳本直接生成到查詢分析器、文件、剪貼板等,如圖6.22 所示。

image

image




6.6.3 執行SQL腳本

   SQL 腳本的執行一般需要在查詢分析器中完成。查詢分析器是一個圖形化的數據庫編程 接口,是SQL Server 客戶端的重要組成部分。查詢分析器以自由的文本格式編輯SQL 代碼, 對語法中的保留字提供彩色顯示,方便開發人員使用。
在SQL Server 2016 中,查詢分析器是一個功能非常強大的圖形工具, 可以進行以下操作:

(1)創建查詢和其他SQL 腳本, 並針對SQLServer 數據庫執行它們。
(2) 由預定義腳本快速創建常用數據庫對象。
(3)快速復制現有數據庫對象。
( 4 ) 在參數未知的情況下執行存儲過程。
( 5 ) 調試存儲過程。
(6) 調試查詢性能問題。
( 7 ) 在數據庫內定位對象(對象搜索功能) ,或查看和使用對象。
(8) 快速插入、更新或刪除表中的行。
(9) 為常用查詢創建鍵盤快捷方式。
(1 0 ) 向【工具】菜單添加常用命令。

以執行SQL 腳本操作為例,使用查詢分析器執行SQL 腳本需要通過以下步驟來實現:

image


image

image

image

image


image

image


6.7 小結

數據庫管理是數據庫管理員和普通用戶操作數據庫的入門操作,需要重點掌握。該章主要 介紹SQLSe凹er 2016 數據庫的維護管理,包括脫機與聯機數據庫、分離和附加數據庫、導入 導出數據、備份和恢復數據庫、收縮數據庫和文件以及生戚與執行SQL 腳本。讀者要特別注 意這些操作的先決條件和限制。通過本章的學習,要能夠對數據庫和數據表有一個系統的維護 概念,並能夠實施維護策略。


6.8 經典習題與面試題



第7章 SQL Server 2016系統維護

SQL Server 2016 是一個龐大的數據庫系統,安裝完成之后需要對數據庫服務器做相應的 設置來保證服務器能夠正常安全地運行。很多讀者安裝完SQL Server 20 1 6 后,在使用過程中 會遇到問題, 為了更好地了解SQL Server 2016,本章將介紹如何啟動SQL Server 服務、注冊 SQL Se凹er 服務器以及SQL Server 數據庫服務器的安全性設置。
本章重點內容:
• 了解啟動SQL Server 服務的多種方式
• 掌握注冊SQL Server 2016 的方法
• 了解數據庫安全的相關概念
• 掌握SQL Server 20 1 6 安全策略


7.1 SQL Server 2016維護須知

數據庫的管理和維護主要是指為了使業務系統能夠高效穩定地運行,對數據庫系統進行可 靠性、安全性、擴張性方面的設置。SQL se凹er 2016 數據庫的管理和維護工作是一個復雜的 過程,包含多種數據庫的備份與恢復技術、服務器管理技術、高可用性技術等。通過使用規范、 一致的數據庫管理運維方案,能給系統帶來以下優點:
• 減輕數據庫管理人員( DBA) 的工作復雜度,使他們可以很容易地從一個數據庫系 統的管理維護轉移到新數據庫系統的維護.
• 可以大幅加快數據庫管理維護相關腳本或者設置的部署時間,尤其在維護龐大的數據 庫系統時.
• 可以有效地實現團隊協作,在大規A莫的數據庫系統環境中通常委有一個DBA 團隊進 行數據庫系統的管理維護,通過使用統一的標准,可以輕松實現協作工作.
• 可以有效地節省數據庫系統剝問苦時間,通過使用統一的數據庫監控和恢復標准,可以 迅速定位故障,並為處理錯誤節約時間,這在24*7 ( 24*7 表示不間斷執行的數據庫, 即每周工作7 天,每天工作24 小時)的數據庫系統中尤其有用.







7.2 啟動SQL Server 2016服務

要使用SQL Server 201 6 數據庫, 首先要開啟服務, 如果服務不開啟, 即使安裝了數據庫 軟件也無法使用數據庫, 如圖7.1 所示。SQL Se凹er 本身就是一個Windows 服務,數據庫中 的每一個實例對應的就是一個sqlserver.exe 進程, 當啟動的時候就調用這個可執行文件來開啟 數據庫服務。本節將為讀者介紹開啟數據庫服務的幾種方法。

image

7.2.1 后台啟動SQL Server 2016

imageimage




7.2.2 通過配置管理器啟動SQL Server 2016

imageimage





7.3 注冊SQL Server 2016

  SQL Server 2016 允許用戶創建服務器組,將多個服務器放在組中進行統一的配置和管理。 服務器組是一個邏輯上的概念,類似於將QQ 中的好友進行分組。當服務器較多的時候, 可以 使用服務器組來進行組織管理。


7.3.1 服務器組的創建與刪除

imageimage




7.3.2 服務器的注冊與刪除

image

imageimageimage




7.4 SQL Server 2016數據庫的安全設置

數據庫服務器是所有應用的數據中轉站,如果數據庫服務器被惡意攻擊,很有可能造成數 據地露、數據丟失、數據被惡意篡改等諸多無法挽回的損失。因此,對數據庫進行安全性設置 是每一個數據管理人員都應該掌握的知識。本節將從更改用戶驗證方式、設置權限、管理角色、 密碼策略等方面對數據庫服務器進行設置。


7.4.1 更改登錄用戶驗證方式

      SQLServer 2016 登錄模式分為"Windows 身份驗證模式"和"SQL Server 和Windows 身 份驗證模式"兩種,若在安裝SQL Server 時選擇的是"Windows 身份驗證模式" ,則sa 登錄 賬戶被禁用;若想開啟sa 賬戶,則可以使用ALTERLOGIN 語句。
        sa 賬戶是SQL Se凹er 中一個廣為人知的賬戶,也是經常被攻擊的主要目標。若應用程序 需要使用sa 賬戶,則應在使用前為sa 更換一個復雜的密碼並按時更換密碼,否則不推薦啟用 該賬戶。在SQLSe凹er 中更換登錄用戶驗證方式的操作步驟如下:

image

imageimage

image

image


image




7.4.2 創建與刪除登錄用戶


         在SQL Server 中可以創建多個登錄用戶來訪問數據庫服務器, SQL Server 可以對創建的 登錄用戶做嚴格的設置來控制賬戶的訪問權限、密碼策略等。下面介紹如何在SQLServer 2016 中創建新的登錄用戶。

image

image


imageimage

image

imageimageimage



7.4.3 創建與刪除數據庫用戶

image

image


image

image


image

image

image



7.4.4 設置服務器角色權限


     當兒個用戶需要在某個特定的數據庫中執行類似的動作時(此處沒有相應的Windows 用 戶組) ,可以向該數據庫中添加一個角色Crole) 。數據庫角色指定了可以訪問相同數據庫對 象的一組數據庫用戶。
      固定服務器角色已經具備了執行指定操作的權限,可以把其他登錄名作為成員添加到固定 服務器角色中,這樣該登錄名就可以繼承固定服務器角色的權限了。在SQL Server 2016 中默 認的服務器角色如圖7.29 所示。

image


• bulkadmin: 這個服務器角色的成員可以運行BULK 1NSERT 語句。這條語句允許從 文本文件中將數據導入SQL Se凹er 2016 數據庫中,為需要執行大容量插入數據庫的 域賬戶而設計。
• dbcreator: 這個服務器角色的成員可以創建、更改、刪除和還原任何數據庫。這既是 適合助理DBA 的角色,也可能是適合開發人員的角色.
• diskadmin: 這個服務器角色用於管理磁盤文件,比如鏡像數據庫和添加備份設備。 它適合助理DBA.
• pr∞essadmin: SQL Server 2016 能夠多任務化,也就是說可以通過執行多個進程做多 個事件。例如, SQL Se凹er 2016 可以生成一個進程,用於向高速援存寫數據,同時 也可以生成另一個進程,用於從高速緩存中讀取數據。這個角色的成員可以結束(在 SQL Se凹er 2008 中稱為刪除)進程。
• securityadmin: 這個服務器角色的成員將管理登錄名及其屬性。他們可以授權、拒絕 和撤銷服務器級權限,也可以授權、拒絕和撤銷數據庫級權限.另外,它們可以重直 SQL Server 2016 登錄名的密碼。

• serveradmin: 這個服務器角色的成員可以更改服務器范圍的配直選項和關閉服務器. 例如, SQL Server 2016 可以使用多大內存或監視,通過網絡發送多少信息,或者關閉 服務器,這個角色可以減輕管理員的一些管理負擔.
• seωpa缸1m: 為需要管理鏈接服務器和控制啟動的存儲過程的用戶而設計.這個角色 的成員能添加到setupadrnin,能增加、刪除和配置鏈接服務器,並能控制啟動過程.
• sysadrnin: 這個服務器角色的成員有權在SQL Se凹er 20 1 6 中執行任何任務.
• pub1ic:有兩大特點,一是初始狀態時沒有權限,二是所有的數據庫用戶都是它的成員。






7.4.5 密碼策略


7.5 小結


7.6 經典習題與面試題



第8章 T—SQL 語言


8.1 T—SQL概述 127
8.1.1 T—SQL語言的組成 128
8.1.2 T—SQL語句結構 128
8.1.3 T—SQL語句 129
8.2 常量 130
8.2.1 數字常量 130
8.2.2 字符串常量 131
8.2.3 日期和時間常量 131
8.2.4 符號常量 132
8.3 變量 132
8.3.1 局部變量 132
8.3.2 全局變量 135
8.3.3 注釋符 135
8.3.4 運算符 136
8.3.5 通配符 139
8.4 流程控制 140
8.4.1 BEGIN
8.4.2 IF單分支語句 141
8.4.3 IF
8.4.4 CASE多分支語句 142
8.4.5 WHILE循環語句 143
8.4.6 WHILE
8.4.7 RETURN返回語句 145
8.4.8 GOTO跳轉語句 146
8.5 常用命令 147
8.5.1 DECLARE定義命令 147
8.5.2 PRINT輸出命令 148
8.5.3 BACKUP備份數據庫 149
8.5.4 RESTORE還原數據庫 152
8.5.5 SELECT返回數據記錄 155
8.5.6 SET設置命令 157
8.5.7 SHUTDOWN關閉數據庫 159
8.5.8 USE打開數據庫 160
8.6 小結 160
8.7 經典習題與面試題 161


第9章 SQL數據查詢


9.1 SELECT語句 162
9.1.1 SELECT語句的基本結構 162
9.1.2 用WITH語句檢查一致性 163
9.1.3 用SELECT
9.1.4 用INTO子句將記錄寫入指定文件 167
9.1.5 用WHERE子句篩選符合條件的記錄 168
9.1.6 用GROUP BY子句記錄分組 172
9.1.7 用HAVING子句對聚合指定條件 173
9.1.8 用ORDER BY子句排序 175
9.1.9 用Distinct關鍵字排除重復值 176
9.1.10 用Top關鍵字返回指定記錄 176
9.2 Union合並多個查詢結果 177
9.2.1 Union與連接之間的區別 177
9.2.2 使用Union All合並表 177
9.2.3 Union中的ORDER BY子句 178
9.2.4 Union中的自動數據類型轉換 179
9.2.5 使用Union合並不同類型的數據 180
9.2.6 使用Union合並有不同列數的兩個表 180
9.2.7 使用Union進行多表合並 181
9.3 子查詢與嵌套查詢 182
9.3.1 什么是子查詢 182
9.3.2 什么是嵌套查詢 182
9.3.3 簡單嵌套查詢 183
9.3.4 帶IN的嵌套查詢 183
9.3.5 帶Not IN的嵌套查詢 184
9.3.6 帶Some的嵌套查詢 184
9.3.7 帶Any的嵌套查詢 185
9.3.8 帶All的嵌套查詢 185
9.3.9 帶Exists的嵌套查詢 186
9.4 連接查詢 187
9.4.1 內部連接 187
9.4.2 外部連接 187
9.4.3 交叉連接 191
9.4.4 連接多表的方法 191
9.5 使用Case函數進行查詢 192
9.6 小結 193
9.7 經典習題與面試題 194


第10章 SQL數據操作


10.1 數據庫操作 195
10.1.1 創建數據庫 195
10.1.2 修改數據庫 196
10.1.3 刪除數據庫 198
10.2 數據表操作 198
10.2.1 使用CREATE TABLE語句創建表 198
10.2.2 創建、修改和刪除約束 200
10.2.3 使用ALTER TABLE語句修改表結構 201
10.2.4 使用DROP TABLE語句刪除表 202
10.3 數據操作 202
10.3.1 使用SELECT語句瀏覽數據 203
10.3.2 使用INSERT 語句添加數據 208
10.3.3 使用UPDATE語句修改指定數據 209
10.3.4 使用DELETE語句刪除指定數據 210
10.4 視圖操作 212
10.4.1 使用CREATE VIEW語句創建視圖 212
10.4.2 使用ALTER VIEW語句修改視圖 214
10.4.3 使用DROP VIEW語句刪除視圖 215
10.5 視圖中的數據操作 215
10.5.1 向視圖中添加數據 215
10.5.2 修改視圖中的數據 216
10.5.3 刪除視圖中的數據 216
10.6 小結 217
10.7 經典習題與面試題 217


第11章 存儲過程


11.1 存儲過程概述 218
11.1.1 什么是存儲過程 219
11.1.2 存儲過程的優點 219
11.2 創建存儲過程 220
11.2.1 使用向導創建存儲過程 220
11.2.2 使用CREATE PROCEDURE語句創建存儲過程 221
11.3 管理存儲過程 223
11.3.1 執行存儲過程 223
11.3.2 查看存儲過程 226
11.3.3 修改存儲過程 228
11.3.4 重命名存儲過程 230
11.3.5 刪除存儲過程 230
11.4 小結 231
11.5 經典習題與面試題


第12章 觸發器


12.1 觸發器概述 233
12.1.1 觸發器的概念 234
12.1.2 觸發器的優點 234
12.1.3 觸發器的種類 235
12.2 創建觸發器 235
12.2.1 創建DML觸發器 236
12.2.2 創建DDL觸發器 240
12.2.3 創建登錄觸發器 242
12.2.4 限制非工作時間操作數據 243
12.2.5 限制對保護數據的操作 243
12.2.6 實現級聯操作 244
12.3 管理觸發器 245
12.3.1 查看觸發器 245
12.3.2 修改觸發器 247
12.3.3 重命名觸發器 248
12.3.4 禁用和啟用觸發器 248
12.3.5 刪除觸發器 250
12.4 小結 251
12.5 經典習題與面試題 251


第13章 索引


13.1 索引的概念 252
13.2 索引的優缺點 252
13.2.1 索引的優點 253
13.2.2 索引的缺點 253
13.3 索引的分類 253
13.3.1 聚集索引 253
13.3.2 非聚集索引 254
13.4 索引的操作 254
13.4.1 索引的創建 254
13.4.2 查看索引信息 259
13.4.3 索引的修改 260
13.4.4 索引的刪除 262
13.4.5 設置索引選項 262
13.5 索引的分析與維護 264
13.5.1 索引的分析 264
13.5.2 索引的維護 265
13.6 全文索引 267
13.6.1 使用SSMS創建全文索引 267
13.6.2 使用T—SQL語句創建全文索引 270
13.6.3 使用T—SQL語句刪除全文索引 271
13.6.4 全文目錄 272
13.6.5 全文目錄的維護 274
13.7 小結 275
13.8 經典習題與面試題 275


第14章 游 標


14.1 游標的概述 276
14.1.1 游標的優點 277
14.1.2 游標的類型 277
14.2 游標的基本操作 278
14.2.1 聲明游標 279
14.2.2 打開游標 280
14.2.3 讀取游標中的數據 280
14.2.4 關閉游標 285
14.2.5 釋放游標 286
14.3 使用系統過程查看游標 286
14.3.1 用sp_cursor_list查看當前連接打開的游標特性 286
14.3.2 用sp_describe_cursor查看游標特性 288
14.4 小結 289
14.5 經典習題與面試題 290


第15章 SQL函數


15.1 聚合函數 291
15.1.1 聚合函數概述 291
15.1.2 用Sum函數求和 292
15.1.3 用Avg函數求平均值 292
15.1.4 用Min函數返回小值 293
15.1.5 用Max函數返回大值 294
15.1.6 用Count函數統計表記錄數 294
15.1.7 用Distinct函數取不重復記錄 295
15.1.8 查詢重復記錄 296
15.2 數學函數 297
15.2.1 數學函數概述 297
15.2.2 用Abs函數求絕對值 298
15.2.3 用Pi函數求圓周率 298
15.2.4 Power函數 299
15.2.5 Rand函數 299
15.2.6 Round函數 300
15.2.7 Square函數和Sqrt函數 300
15.2.8 三角函數 302
15.3 字符串函數 303
15.3.1 字符串函數概述 303
15.3.2 Ascii函數 303
15.3.3 Charindex函數 304
15.3.4 Left函數 304
15.3.5 Right函數 305
15.3.6 Len函數 306
15.3.7 Replace函數 307
15.3.8 Reverse函數 307
15.3.9 Str函數 308
15.3.10 Substring函數 309
15.4 日期和時間函數 310
15.4.1 日期和時間函數概述 310
15.4.2 Getdate函數 310
15.4.3 Day函數 311
15.4.4 Month函數 311
15.4.5 Year函數 312
15.4.6 Datediff函數 313
15.4.7 Dateadd函數 313
15.5 轉換函數 314
15.5.1 轉換函數概述 314
15.5.2 Cast函數 314
15.5.3 Convert函數 315
15.6 小結 316
15.7 經典習題與面試題 317


第16章 事 務


16.1 事務的概念 318
16.2 顯式事務與隱式事務 319
16.2.1 顯式事務 320
16.2.2 隱式事務 322
16.2.3 API中控制隱式事務 322
16.2.4 事務的COMMIT和ROLLBACK 322
16.3 使用事務 323
16.3.1 開始事務 323
16.3.2 結束事務 324
16.3.3 回滾事務 325
16.3.4 事務的工作機制 326
16.3.5 自動提交事務 328
16.3.6 事務的並發問題 328
16.3.7 事務的隔離級別 329
16.4 鎖 330
16.4.1 SQL Server鎖機制 330
16.4.2 鎖模式 330
16.4.3 鎖的粒度 331
16.4.4 查看鎖 332
16.4.5 死鎖 332
16.5 分布式事務處理 333
16.5.1 分布式事務簡介 333
16.5.2 創建分布式事務 334
16.5.3 分布式處理協調器 334
16.6 小結 335
16.7 經典習題與面試題


第17章 數據庫的性能優化


17.1 數據庫設計 337
17.1.1 規范化與非規范化 337
17.1.2 選擇適當的數據類型 339
17.1.3 索引的選擇 340
17.2 查詢優化 340
17.2.1 避免使用“*” 341
17.2.2 避免負邏輯 341
17.2.3 列操作 341
17.2.4 避免使用DISTINCT 342
17.2.5 存儲過程 342
17.3 考慮並行 343
17.4 索引操作 344
17.4.1 避免在索引列上進行運算 345
17.4.2 避免在索引列上用OR運算符 345
17.4.3 避免在索引列上用IS NULL 346
17.5 小結 346
17.6 經典習題與面試題 347


第18章 雲計算、大數據與雲數據庫


18.1 雲計算概述 348
18.1.1 什么是雲計算 348
18.1.2 雲計算的起源 349
18.1.3 雲計算的特點和優勢 350
18.1.4 雲計算的現狀 351
18.1.5 雲計算的應用領域 352
18.2 大數據概述 353
18.3 NoSQL數據庫 355
18.3.1 傳統關系型數據庫及其問題 355
18.3.2 NoSQL數據庫概述 356
18.3.3 NoSQL數據庫的優劣 357
18.3.4 NoSQL數據庫的發展趨勢 358
18.4 幾種主要的雲數據庫 358
18.5 SQL Server 2016的雲功能 360
18.5.1 數據文件部署到Azure雲環境 360
18.5.2 備份到Windows Azure存儲 362
18.6 小結 363


第19章 企業ERP管理系統


19.1 系統分析 364
19.1.1 需求分析 364
19.1.2 可行性分析 365
19.2 系統設計 365
19.2.1 系統目標 365
19.2.2 系統功能結構 365
19.2.3 系統業務流程 366
19.2.4 命名規范 367
19.3 數據庫與數據表設計 368
19.3.1 數據庫分析 368
19.3.2 數據庫概念設計 368
19.3.3 數據庫邏輯設計 370
19.3.4 數據表邏輯關系 373
19.4 小結 374


第20章 人事管理系統


20.1 系統分析 375
20.1.1 需求分析 375
20.1.2 可行性分析 377
20.2 數據庫設計 377
20.2.1 數據庫需求分析 377
20.2.2 數據庫概念設計 377
20.2.3 數據庫邏輯設計 379
20.2.4 數據表邏輯關系 380
20.2.5 創建數據庫 380
20.3 小結 382

 


 





 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM