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



1:書籍下載方式:

image

SQL Server2016從入門到實戰 PDF 下載html

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

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

image


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

做者簡介

做者:孫亞南

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

目錄

第1章 數據庫入門 1

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


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 都是全球獨一無2、不存在重複的。一般在並 發性較強的環境下能夠考慮使用。它的優勢在於全球惟一性、可對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 系統分析 37520.1.1 需求分析 37520.1.2 可行性分析 37720.2 數據庫設計 37720.2.1 數據庫需求分析 37720.2.2 數據庫概念設計 37720.2.3 數據庫邏輯設計 37920.2.4 數據表邏輯關係 38020.2.5 建立數據庫 38020.3 小結 382

相關文章
相關標籤/搜索