數(shù)據(jù)庫SQLServerSQLite教程PPT完整全套教學(xué)課件_第1頁
數(shù)據(jù)庫SQLServerSQLite教程PPT完整全套教學(xué)課件_第2頁
數(shù)據(jù)庫SQLServerSQLite教程PPT完整全套教學(xué)課件_第3頁
數(shù)據(jù)庫SQLServerSQLite教程PPT完整全套教學(xué)課件_第4頁
數(shù)據(jù)庫SQLServerSQLite教程PPT完整全套教學(xué)課件_第5頁
已閱讀5頁,還剩716頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

目錄第1章概論第2章關(guān)系數(shù)據(jù)模型與關(guān)系運(yùn)算第3章數(shù)據(jù)庫基礎(chǔ)第4章關(guān)系數(shù)據(jù)庫語言SQL(上)第5章關(guān)系數(shù)據(jù)庫語言SQL(下)第6章視圖與索引第7章Transact-SQL應(yīng)用第8章存儲(chǔ)過程、觸發(fā)器和游標(biāo)第9章數(shù)據(jù)庫應(yīng)用開發(fā)第10章數(shù)據(jù)庫管理維護(hù)與新技術(shù)第11章SQLite數(shù)據(jù)庫操作第1章概論1.1數(shù)據(jù)庫技術(shù)的發(fā)展歷史1.2數(shù)據(jù)庫技術(shù)的基本概念1.3數(shù)據(jù)庫系統(tǒng)體系結(jié)構(gòu)1.4

DBMS的功能

1.1數(shù)據(jù)庫技術(shù)的發(fā)展歷史

1.1.1數(shù)據(jù)管理技術(shù)的發(fā)展歷程20世紀(jì)60年代,計(jì)算機(jī)開始廣泛地應(yīng)用于數(shù)據(jù)管理,對(duì)數(shù)據(jù)的共享提出了越來越高的要求。傳統(tǒng)的文件系統(tǒng)已經(jīng)不能滿足人們的需要,能夠統(tǒng)一管理和共享數(shù)據(jù)的數(shù)據(jù)庫管理技術(shù)得到了用戶的認(rèn)可。

⒈人工管理階段

人工管理階段主要集中在20世紀(jì)50年代以前。當(dāng)時(shí)計(jì)算機(jī)剛剛面世,人們把計(jì)算機(jī)當(dāng)作一種工具,用于科學(xué)計(jì)算,將程序和相關(guān)數(shù)據(jù)輸入計(jì)算機(jī),經(jīng)處理后輸出結(jié)果。

人工管理階段的數(shù)據(jù)管理如圖1-1所示。圖1-1人工管理階段的數(shù)據(jù)管理

人工管理階段的數(shù)據(jù)管理具有以下幾個(gè)特點(diǎn):

(1)數(shù)據(jù)并不保存在計(jì)算機(jī)中。

(2)應(yīng)用程序自己管理數(shù)據(jù)。

(3)數(shù)據(jù)無法共享。

(4)數(shù)據(jù)與應(yīng)用程序之間不具有獨(dú)立性。

(5)只有程序,沒有文件。

⒉文件系統(tǒng)階段

20世紀(jì)50年代中期到60年代中期,出現(xiàn)了文件系統(tǒng)形式的數(shù)據(jù)管理技術(shù)。它主要是隨著磁盤、磁鼓等存儲(chǔ)設(shè)備的出現(xiàn)及操作系統(tǒng)技術(shù)的發(fā)展而提出的。

文件系統(tǒng)階段的數(shù)據(jù)管理,主要是以文件形式保存和管理的,如圖1-2所示。圖1-2文件系統(tǒng)階段的數(shù)據(jù)管理

文件系統(tǒng)階段數(shù)據(jù)管理的主要特點(diǎn)可歸納為以下幾點(diǎn):

(1)數(shù)據(jù)以文件形式存在,由文件系統(tǒng)管理。

(2)數(shù)據(jù)可以較長時(shí)間地保存在磁盤上。

(3)數(shù)據(jù)共享性差、冗余大,必須建立不同的文件以滿足不同的應(yīng)用。

(4)數(shù)據(jù)與應(yīng)用程序之間具有一定的獨(dú)立性,但非常有限。

⒊數(shù)據(jù)庫管理階段

20世紀(jì)60年代末開始,數(shù)據(jù)管理進(jìn)入數(shù)據(jù)庫管理階段。這一階段引入了數(shù)據(jù)庫管理系統(tǒng)(DBMS)實(shí)現(xiàn)數(shù)據(jù)管理,如圖1-3所示。圖1-3數(shù)據(jù)庫管理階段的數(shù)據(jù)管理

數(shù)據(jù)庫管理階段的數(shù)據(jù)管理的主要特點(diǎn)如下:

(1)數(shù)據(jù)結(jié)構(gòu)化。

(2)高共享、低冗余,且易于擴(kuò)充。

(3)數(shù)據(jù)獨(dú)立性高。

(4)數(shù)據(jù)由DBMS統(tǒng)一管理和控制,應(yīng)用系統(tǒng)中所有的數(shù)據(jù)都由DBMS負(fù)責(zé)存取。

1.1.2數(shù)據(jù)庫技術(shù)的發(fā)展歷程

數(shù)據(jù)庫技術(shù)從20世紀(jì)60年代末開始發(fā)展,在計(jì)算機(jī)應(yīng)用領(lǐng)域,數(shù)據(jù)處理逐漸占據(jù)了主導(dǎo)地位,應(yīng)用也越來越廣泛。

1.2數(shù)據(jù)庫技術(shù)的基本概念

1.2.1數(shù)據(jù)數(shù)據(jù)是數(shù)據(jù)庫中存儲(chǔ)和管理的基本對(duì)象。數(shù)據(jù)是事實(shí)或觀察的結(jié)果,是對(duì)客觀事物的邏輯歸納,是用于表示客觀事物的未經(jīng)加工的原始素材,可以是字符、文字、聲音、圖像、視頻等。通常對(duì)數(shù)據(jù)的定義是:數(shù)據(jù)(Data)是人們用來反映客觀世界而記錄下來的可以鑒別的物理符號(hào)。這個(gè)定義的含義是數(shù)據(jù)是“客觀的”,也是“可鑒別的”。

1.2.2數(shù)據(jù)庫與數(shù)據(jù)庫模式

⒈數(shù)據(jù)庫的概念和特點(diǎn)

簡單地講,數(shù)據(jù)庫是一個(gè)存儲(chǔ)數(shù)據(jù)的倉庫。但是,這種定義肯定是不準(zhǔn)確的,因?yàn)閿?shù)據(jù)庫中的數(shù)據(jù)并不是隨意存放的,而是有一定的組織和類型特征。嚴(yán)格的數(shù)據(jù)庫定義為:

數(shù)據(jù)庫(DataBase,DB)是長期存儲(chǔ)在計(jì)算機(jī)內(nèi),有組織的、可共享的大量數(shù)據(jù)的集合。這個(gè)定義指出了數(shù)據(jù)庫具有以下幾個(gè)特點(diǎn):

(1)數(shù)據(jù)庫是數(shù)據(jù)的集合,因此數(shù)據(jù)庫只是一個(gè)符號(hào)的集合,本身是沒有語義的。

(2)數(shù)據(jù)庫中的數(shù)據(jù)不是雜亂無章的,而是有組織的。

(3)數(shù)據(jù)庫中存儲(chǔ)的數(shù)據(jù)通常是海量的。

(4)數(shù)據(jù)庫通常是持久存儲(chǔ)的,即存儲(chǔ)在磁盤等持久存儲(chǔ)的介質(zhì)上。

(5)數(shù)據(jù)庫一般是被多用戶共享的。

(6)數(shù)據(jù)庫一般服務(wù)于某個(gè)特定的應(yīng)用,因此數(shù)據(jù)間聯(lián)系密切,具有最小冗余度和較高的獨(dú)立性。

⒉數(shù)據(jù)庫模式

數(shù)據(jù)庫本身是沒有語義的,因此引入另一個(gè)概念即數(shù)據(jù)庫模式(DatabaseSchema)來表達(dá)數(shù)據(jù)庫的語義。最常見的數(shù)據(jù)庫模式定義為:數(shù)據(jù)庫模式是數(shù)據(jù)庫語義的表達(dá),它是數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述。

圖1-4所示是數(shù)據(jù)庫與數(shù)據(jù)庫模式的一個(gè)例子。圖1-4數(shù)據(jù)庫與數(shù)據(jù)庫模式示例

1.2.3數(shù)據(jù)庫管理系統(tǒng)

隨著數(shù)據(jù)庫技術(shù)的豐富和發(fā)展,數(shù)據(jù)庫管理系統(tǒng)的概念應(yīng)運(yùn)而生。其定義為:數(shù)據(jù)庫管理系統(tǒng)(DBMS)是一個(gè)用于創(chuàng)建、管理和維護(hù)數(shù)據(jù)庫的大型計(jì)算機(jī)軟件。

數(shù)據(jù)庫管理系統(tǒng)從軟件的分類角度來說,屬于計(jì)算機(jī)系統(tǒng)軟件。系統(tǒng)軟件一般是管理計(jì)算機(jī)資源的軟件。通常情況下,數(shù)據(jù)庫管理系統(tǒng)運(yùn)行在操作系統(tǒng)之上,用于管理計(jì)算機(jī)

中的數(shù)據(jù)資源。也就是說,當(dāng)涉及底層的磁盤操作時(shí),數(shù)據(jù)庫管理系統(tǒng)通常利用操作系統(tǒng)提供的磁盤存取服務(wù)來實(shí)現(xiàn)底層數(shù)據(jù)存取。

用戶還可以在數(shù)據(jù)庫管理系統(tǒng)之上創(chuàng)建直接服務(wù)于應(yīng)用的數(shù)據(jù)庫應(yīng)用系統(tǒng)(即數(shù)據(jù)庫應(yīng)用軟件),從而構(gòu)建基于數(shù)據(jù)庫技術(shù)的應(yīng)用軟件,滿足實(shí)際應(yīng)用的需求。圖1-5顯示了用戶應(yīng)用、DBMS和操作系統(tǒng)之間的層次架構(gòu)。圖1-5用戶應(yīng)用、DBMS和操作系統(tǒng)之間的層次架構(gòu)

1.2.4數(shù)據(jù)庫系統(tǒng)

數(shù)據(jù)庫系統(tǒng)是一個(gè)更加寬廣的概念,類似于計(jì)算機(jī)系統(tǒng)。其定義為:數(shù)據(jù)庫系統(tǒng)(DBS)是指在計(jì)算機(jī)系統(tǒng)中引入了數(shù)據(jù)庫后的系統(tǒng),即采用了數(shù)據(jù)庫技術(shù)的計(jì)算機(jī)系統(tǒng)。

據(jù)庫系統(tǒng)作為一個(gè)計(jì)算機(jī)系統(tǒng),包含了軟件、硬件、數(shù)據(jù)庫、數(shù)據(jù)庫管理人員、終端用戶等要素,電子政務(wù)系統(tǒng)、銀行信息系統(tǒng)等都可以稱為數(shù)據(jù)庫系統(tǒng)。在數(shù)據(jù)庫系統(tǒng)中,

用戶可分為數(shù)據(jù)庫管理員和終端用戶兩類,其中數(shù)據(jù)庫管理員直接與DBMS打交道,終端用戶直接與應(yīng)用程序交互。一個(gè)系統(tǒng)可分為前臺(tái)和后臺(tái),前臺(tái)是終端用戶,是應(yīng)用,后

臺(tái)是管理、開發(fā)和維護(hù)。

1.3數(shù)據(jù)庫系統(tǒng)體系結(jié)構(gòu)

1.3.1ANSI/SPARC體系結(jié)構(gòu)從軟件架構(gòu)上看,引入DBMS之后的系統(tǒng)中開始出現(xiàn)數(shù)據(jù)庫服務(wù)器。其數(shù)據(jù)庫體系結(jié)構(gòu)(或模式結(jié)構(gòu))目前廣泛采用的是ANSI/SPARC體系結(jié)構(gòu)的架構(gòu)。ANSI/SPARC體系結(jié)構(gòu)可以用一句話概括,即三級(jí)模式結(jié)構(gòu)+兩級(jí)映像。ANSI/SPARC體系結(jié)構(gòu)如圖1-6所示。圖1-6ANSI/SPARC體系結(jié)構(gòu)

ANSI/SPARC體系結(jié)構(gòu)的三級(jí)模式結(jié)構(gòu)為:

(1)概念模式:定義了邏輯層的模式結(jié)構(gòu),表示整個(gè)數(shù)據(jù)庫的邏輯結(jié)構(gòu),如數(shù)據(jù)記錄由哪些數(shù)據(jù)項(xiàng)構(gòu)成,數(shù)據(jù)項(xiàng)的名稱、類型、取值范圍,數(shù)據(jù)之間的聯(lián)系、數(shù)據(jù)的完整

性等。一個(gè)數(shù)據(jù)庫只有一個(gè)概念模式。

(2)外模式:也稱用戶模式(UserSchema)或子模式,它定義了視圖層(ViewLevel)的模式結(jié)構(gòu)。

(3)內(nèi)模式:定義了物理層的模式結(jié)構(gòu),它描述了數(shù)據(jù)庫的物理存儲(chǔ)結(jié)構(gòu)和存儲(chǔ)方式。

1.3.2客戶機(jī)/服務(wù)器結(jié)構(gòu)和瀏覽器/服務(wù)器結(jié)構(gòu)

⒈客戶機(jī)/服務(wù)器結(jié)構(gòu)

客戶機(jī)/服務(wù)器結(jié)構(gòu)(Client/ServerArchitecture,C/S結(jié)構(gòu))是20世紀(jì)90年代產(chǎn)生的一種數(shù)據(jù)庫應(yīng)用系統(tǒng)體系結(jié)構(gòu)。客戶機(jī)主要運(yùn)行應(yīng)用程序及一些前端的數(shù)據(jù)庫開發(fā)工具;

服務(wù)器主要提供DBMS的功能。在Web技術(shù)出現(xiàn)之前,客戶機(jī)/服務(wù)器結(jié)構(gòu)是最流行的架構(gòu)。進(jìn).

⒉瀏覽器/服務(wù)器結(jié)構(gòu)

瀏覽器/服務(wù)器結(jié)構(gòu)(Browser/ServerArchitecture,B/S結(jié)構(gòu))可以看成是Web時(shí)代的客戶機(jī)/服務(wù)器結(jié)構(gòu)。瀏覽器/服務(wù)器結(jié)構(gòu)的應(yīng)用系統(tǒng)通常運(yùn)行在Internet上,當(dāng)然也可以只運(yùn)行于局域網(wǎng)內(nèi),不過要求支持TCP/IP,即Intranet,如圖1-7所示。圖1-7瀏覽器/服務(wù)器結(jié)構(gòu)

與客戶機(jī)/服務(wù)器結(jié)構(gòu)比較,瀏覽器/服務(wù)器結(jié)構(gòu)具有以下主要優(yōu)點(diǎn):

(1)統(tǒng)一的客戶機(jī)界面,維護(hù)和升級(jí)相對(duì)簡單。

(2)基于Web技術(shù),支持互聯(lián)網(wǎng)應(yīng)用,服務(wù)器操作系統(tǒng)選擇更多。互聯(lián)網(wǎng)應(yīng)用的優(yōu)點(diǎn)是可以跨地域運(yùn)行。傳統(tǒng)的C/S結(jié)構(gòu)的應(yīng)用一般只能局限在局域網(wǎng)中。

B/S結(jié)構(gòu)也存在以下缺點(diǎn):

(1)安全性問題,用戶訪問無地域限制。

(2)開發(fā)工具的能力相對(duì)較弱,應(yīng)用服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷較重,存儲(chǔ)服務(wù)更加重要。

1.4DBMS的功能

DBMS的功能大致可歸納為以下幾點(diǎn)。數(shù)據(jù)庫定義DBMS提供DDL翻譯處理程序、保密定義處理程序、完整性約束定義處理程序等,接收相應(yīng)的定義,進(jìn)行語法、語義檢查,把它們翻譯為內(nèi)部格式。

⒉數(shù)據(jù)庫操縱

DBMS提供DML處理程序、終端查詢語言解釋程序、數(shù)據(jù)存取程序、數(shù)據(jù)更新程序等,對(duì)用戶數(shù)據(jù)操縱請(qǐng)求進(jìn)行語法、語義檢查,有數(shù)據(jù)存取更新則執(zhí)行存取更新操作。數(shù)

據(jù)庫為前端應(yīng)用程序服務(wù)提供數(shù)據(jù)庫存取能力,主要是對(duì)基本表的操縱,包括增加、刪除、修改、查詢等。

⒊數(shù)據(jù)庫保護(hù)

為了保證數(shù)據(jù)庫的安全,DBMS必須提供一定的數(shù)據(jù)庫保護(hù)功能。數(shù)據(jù)庫保護(hù)功能通常包括兩種方式:一是提供數(shù)據(jù)庫故障后的恢復(fù)功能;二是提供防止數(shù)據(jù)庫被破壞的技

術(shù)。具體的數(shù)據(jù)庫保護(hù)功能包括數(shù)據(jù)庫恢復(fù)、并發(fā)控制、完整性控制、安全性控制等。

⒋數(shù)據(jù)庫的建立和維護(hù)

DBMS提供文件讀寫與維護(hù)程序、存取路徑管理程序、緩沖區(qū)管理程序等,這些程序負(fù)責(zé)維護(hù)數(shù)據(jù)庫的數(shù)據(jù)和存取路徑。DBMS提供初始數(shù)據(jù)的轉(zhuǎn)換和裝入、數(shù)據(jù)備份、數(shù)據(jù)庫的重組織、性能監(jiān)控和分析等功能,這些功能對(duì)于保證DBMS的實(shí)用性是必不可少的。第2章

關(guān)系數(shù)據(jù)模型與關(guān)系運(yùn)算2.1數(shù)據(jù)模型概述2.2關(guān)系數(shù)據(jù)模型2.3關(guān)系運(yùn)算

2.1數(shù)據(jù)模型概述

2.1.1數(shù)據(jù)模型的定義數(shù)據(jù)模型(DataModel)是對(duì)現(xiàn)實(shí)世界數(shù)據(jù)特征的抽象,如數(shù)據(jù)的組成、數(shù)據(jù)之間的聯(lián)系等?,F(xiàn)實(shí)世界中的實(shí)體不僅具有數(shù)據(jù)特征,還具有其他特征,如行為特征等。但對(duì)于數(shù)據(jù)模型而言,只關(guān)心實(shí)體的數(shù)據(jù)特征。數(shù)據(jù)模型是描述現(xiàn)實(shí)世界實(shí)體、實(shí)體之間的聯(lián)系以及語義約束的模型。

2.1.2數(shù)據(jù)模型的分類

根據(jù)對(duì)現(xiàn)實(shí)世界數(shù)據(jù)抽象層次的不同,可將數(shù)據(jù)模型分為概念數(shù)據(jù)模型和結(jié)構(gòu)數(shù)據(jù)模型。兩種數(shù)據(jù)模型之間的關(guān)系如圖2-1所示。

概念數(shù)據(jù)模型又稱語義數(shù)據(jù)模型,強(qiáng)調(diào)從用戶的角度來描述現(xiàn)實(shí)世界的數(shù)據(jù)特征,著重于對(duì)實(shí)際數(shù)據(jù)需求的獲取和表達(dá),應(yīng)該簡單、清晰、易于用戶理解。圖2-1概念數(shù)據(jù)模型與結(jié)構(gòu)數(shù)據(jù)模型之間的關(guān)系

結(jié)構(gòu)數(shù)據(jù)模型又稱邏輯數(shù)據(jù)模型,是用戶從數(shù)據(jù)庫看到的模型,強(qiáng)調(diào)從數(shù)據(jù)庫的角度來進(jìn)行數(shù)據(jù)建模,具體表現(xiàn)為網(wǎng)狀數(shù)據(jù)模型、層次數(shù)據(jù)模型等。數(shù)據(jù)庫的邏輯結(jié)構(gòu)包括數(shù)

據(jù)結(jié)構(gòu)、數(shù)據(jù)操作和數(shù)據(jù)約束三個(gè)要素。結(jié)構(gòu)數(shù)據(jù)模型是DBMS的邏輯基礎(chǔ),任何一個(gè)DBMS都是基于某種特定的結(jié)構(gòu)數(shù)據(jù)模型的,既要面向用戶,又要面向系統(tǒng)。

2.1.3E-R模型

在數(shù)據(jù)庫領(lǐng)域已經(jīng)提出了多種概念數(shù)據(jù)模型建模的方法,其中最著名和最流行的是E-R模型。

E-R模型(Entity-RelationshipModel,實(shí)體-聯(lián)系模型)是由美國路易斯安那州立大學(xué)的華裔教授PeterP.Chen于1976年提出的。E-R模型提供不受任何DBMS約束的面向用戶

的表達(dá)方法,建模思想簡單,語義表達(dá)能力強(qiáng),一經(jīng)推出,立即受到了工業(yè)界的歡迎,在數(shù)據(jù)庫設(shè)計(jì)中被廣泛用作數(shù)據(jù)建模的工具。E-R模型的核心思想是將現(xiàn)實(shí)世界中的所有數(shù)

據(jù)都表示為實(shí)體,然后在實(shí)體與實(shí)體之間建立相應(yīng)的聯(lián)系,并最終通過建立E-R圖來表示所有的數(shù)據(jù)語義。

⒈E-R模型的組成

E-R模型的構(gòu)成要素,首先是實(shí)體和聯(lián)系。又因?yàn)閷?shí)體和聯(lián)系都有其相應(yīng)的屬性,所以E-R模型的組成包括三個(gè)要素:實(shí)體、聯(lián)系和屬性。

1)實(shí)體(Entity)

實(shí)體是現(xiàn)實(shí)世界中可標(biāo)識(shí)的對(duì)象,可以是物理實(shí)體,也可以是抽象實(shí)體。實(shí)體的一個(gè)重要特征是它在現(xiàn)實(shí)世界是可以唯一標(biāo)識(shí)的,如果不能唯一標(biāo)識(shí),則必須進(jìn)一步分解。此

外,實(shí)體具有相應(yīng)的實(shí)體名。

2)聯(lián)系(Relationship)

在E-R模型中,聯(lián)系是實(shí)體與實(shí)體之間的某種關(guān)聯(lián),通過連線表示出來。聯(lián)系也具有相應(yīng)的聯(lián)系名。在E-R模型中,實(shí)體之間的聯(lián)系分為三種類型:

(1)一對(duì)一聯(lián)系:指一個(gè)實(shí)體A只能與一個(gè)實(shí)體B發(fā)生聯(lián)系,反之亦然。它通常表示為1∶1或1-1。

(2)一對(duì)多聯(lián)系:指實(shí)體A和實(shí)體B存在1∶N聯(lián)系,即一個(gè)實(shí)體A可以與一個(gè)或多個(gè)實(shí)體B發(fā)生聯(lián)系,但一個(gè)實(shí)體B只能與一個(gè)實(shí)體A發(fā)生聯(lián)系。它通常表示為1∶N或1-N。

(3)多對(duì)多聯(lián)系:指實(shí)體A與實(shí)體B存在M∶N聯(lián)系,即一個(gè)實(shí)體A可以與一個(gè)或多個(gè)實(shí)體B發(fā)生聯(lián)系;反之,一個(gè)實(shí)體B也可以與一個(gè)或多個(gè)實(shí)體A發(fā)生聯(lián)系。它通常表示為M∶N或M-N。

3)屬性(Attribute)

實(shí)體內(nèi)部和實(shí)體之間的聯(lián)系都可以擁有一些描述自身特征的數(shù)據(jù)項(xiàng),稱為屬性。實(shí)體內(nèi)部通常有多個(gè)屬性,構(gòu)成一個(gè)屬性集。在這些屬性中,可以唯一標(biāo)識(shí)實(shí)體屬性的就是實(shí)

體的碼。實(shí)體之間的聯(lián)系本身也可以有描述屬性。

屬性一般具有一個(gè)屬性名和一個(gè)域。域代表了屬性可以取值的范圍。

2.E-R模型的符號(hào)

E-R模型通過建立由實(shí)體、聯(lián)系和屬性構(gòu)成的E-R圖來描述現(xiàn)實(shí)世界的數(shù)據(jù)需求,因此E-R模型也稱為E-R圖。

E-R模型的基本符號(hào)如圖2-2所示,實(shí)體集用矩形框表示,實(shí)體的屬性用橢圓框表示,實(shí)體間的聯(lián)系用菱形框表示,并附上相應(yīng)的名稱。圖2-2E-R模型的基本符號(hào)

例如,一個(gè)公司業(yè)務(wù)流程的E-R模型設(shè)計(jì)如圖2-3所示。圖2-3某公司業(yè)務(wù)流程E-R圖

⒊E-R模型的集成與優(yōu)化

完成了各個(gè)底層子系統(tǒng)的E-R模型后,下一步將進(jìn)行E-R模型的集成和優(yōu)化。方法是,首先找出公共實(shí)體,然后基于公共實(shí)體進(jìn)行合并,最后消除合并過程中出現(xiàn)的各種沖突。

E-R模型在集成的過程中,可能出現(xiàn)的沖突大致有以下幾種:

(1)屬性沖突。

(2)結(jié)構(gòu)沖突。

(3)命名沖突。

E-R模型在優(yōu)化過程中,可能出現(xiàn)的情形大致有以下幾種:

(1)合并實(shí)體。

(2)消除冗余屬性。

(3)消除冗余聯(lián)系。

2.2關(guān)系數(shù)據(jù)模型

2.2.1關(guān)系模型的相關(guān)概念關(guān)系模型是以規(guī)范化的二維表格結(jié)構(gòu)表示實(shí)體,以外碼表示實(shí)體間的聯(lián)系,以三類完整性表示語義約束的數(shù)據(jù)模型。關(guān)系模型示例如圖2-4所示,涉及一些術(shù)語,包括元組、屬性、關(guān)系等。圖2-4關(guān)系模型的相關(guān)概念示例

在關(guān)系模型中,所有實(shí)體都表示在一個(gè)二維表格結(jié)構(gòu)中,每一個(gè)實(shí)體表示為表格中的一行,稱為一個(gè)元組(Tuple)。元組的數(shù)目稱為關(guān)系的基數(shù)。元組本質(zhì)上是數(shù)據(jù),是一系列屬性值的集合。

表格的每一列稱為一個(gè)屬性(Attribute),屬性有一個(gè)屬性名及相應(yīng)的域。屬性的數(shù)目稱為關(guān)系模式的度(Degree),元組的每一個(gè)值稱為屬性值。

關(guān)系數(shù)據(jù)庫模式(RelationalDatabaseSchema)用于描述整個(gè)關(guān)系數(shù)據(jù)庫的邏輯結(jié)構(gòu)和特征。關(guān)系數(shù)據(jù)庫模式的一個(gè)實(shí)例稱為關(guān)系數(shù)據(jù)庫。在關(guān)系模型中涉及以下幾個(gè)碼的概念:

(1)超碼(SupperKey):關(guān)系模式中能夠唯一區(qū)分每個(gè)元組的屬性集合。

(2)候選碼(CandidateKey):不含多余屬性的超碼。它是唯一區(qū)分元組的最小屬性集。

(3)主碼(PrimaryKey):用戶選定的作為元組標(biāo)識(shí)的候選碼,其他的候選碼稱為替換碼(AlternateKey)。主碼在E-R圖中以屬性名加下畫線表示。

2.2.2關(guān)系的幾個(gè)性質(zhì)

關(guān)系模型是以二維表格形式的關(guān)系為基本數(shù)據(jù)結(jié)構(gòu),并且必須滿足一定的規(guī)范,因此關(guān)系是規(guī)范化的二維表格,表現(xiàn)為以下幾個(gè)性質(zhì):

(1)屬性值不可分解:每個(gè)屬性值都是單一值,不能是一個(gè)值集。通俗地講,就是不允許關(guān)系出現(xiàn)“表中表”。

(2)元組不可重復(fù):任何關(guān)系中都不允許存在重復(fù)元組。

(3)關(guān)系沒有行序:任何關(guān)系的元組之間沒有順序。

(4)關(guān)系沒有列序:任何關(guān)系的屬性列之間沒有順序。

2.2.3關(guān)系模型的完整性約束

關(guān)系模型通過四類完整性約束來表達(dá)數(shù)據(jù)的語義約束,即實(shí)體完整性、參照完整性、域完整性和用戶自定義完整性。完整性約束(IntegralConstrait)也稱完整性規(guī)則(Integral

Rule),是關(guān)系模式必須滿足的一些謂詞條件,體現(xiàn)為具體領(lǐng)域中的語義約束。依據(jù)完整性約束,關(guān)系模型可以表達(dá)豐富的語義約束條件。

⒈實(shí)體完整性

實(shí)體完整性(EntityIntegrity)也稱行完整性,是指關(guān)系模式的任一關(guān)系的主屬性值(候選碼)不可為空。圖2-5為一個(gè)實(shí)體完整性示例。圖2-5實(shí)體完整性示例

⒉參照完整性

參照完整性(ReferentialIntegerity)也稱引用完整性,定義在兩個(gè)關(guān)系模式之上,涉及外碼概念,用于保證相關(guān)表中數(shù)據(jù)的一致性。關(guān)系模式R的外碼(ForeignKey)是指它的

一個(gè)屬性集FK滿足兩個(gè)條件:存在帶有候選碼CK的關(guān)系模式S;R的任一非空FK值都在S的CK中有一個(gè)相同的值。我們把S稱為被參照關(guān)系(ReferencedRelation),R稱為參照關(guān)系(ReferentialRelation)。圖2-6為一個(gè)外碼的示例。圖2-6關(guān)系模式的外碼示例

⒊域完整性

實(shí)體完整性和參照完整性給出了針對(duì)主碼和外碼的語義約束,但實(shí)際應(yīng)用還常常要求對(duì)一些非碼屬性添加完整性約束,因此,在關(guān)系模型中引入了第三類完整性約束。

域完整性也稱列完整性,是指定列的輸入有效性,通過限制列的類型、格式和可能值的范圍等方法加以實(shí)現(xiàn)。域完整性通常以不等式、等式等形式給出,并且可以通過邏輯操

作符連接多個(gè)謂詞條件。

⒋用戶自定義完整性

這是用戶根據(jù)實(shí)際應(yīng)用的需要而自行定義的數(shù)據(jù)完整性。所有完整性類別都支持用戶定義完整性,包括CreateTable中所有列級(jí)約束和表級(jí)約束、存儲(chǔ)過程及觸發(fā)器。

例如,在訂單表中,發(fā)貨日期不能早于訂貨日期,因此,在使用Update或Insert操作創(chuàng)建觸發(fā)器時(shí),定義發(fā)貨日期>訂貨日期,否則會(huì)出錯(cuò)并回滾事務(wù)。

2.3關(guān)系運(yùn)算關(guān)系運(yùn)算是關(guān)系模型數(shù)據(jù)操作的主要實(shí)現(xiàn)方式,分為兩類:一類是傳統(tǒng)的集合運(yùn)算(并、差、交、笛卡爾積),另一類是專門的關(guān)系運(yùn)算(選擇、投影、連接等)。任何關(guān)系運(yùn)算的結(jié)果仍然是一個(gè)關(guān)系,有些查詢需要幾個(gè)基本運(yùn)算的組合,要經(jīng)過若干步驟才能完成。關(guān)系運(yùn)算操作有兩種類型:一元操作和二元操作。一元操作是指只有一個(gè)運(yùn)算對(duì)象的操作,二元操作是指有兩個(gè)運(yùn)算對(duì)象的操作,如并、交、差等操作。用戶對(duì)關(guān)系運(yùn)算的操作需求,表現(xiàn)為關(guān)系表達(dá)式。

⒈集合運(yùn)算

已知關(guān)系R和關(guān)系S如圖2-7所示,其四種集合操作如下:

(1)并(Union)。并即R和S具有相同的結(jié)構(gòu),其運(yùn)算符為“∪”,記為T=R∪S。

(2)差(Difference)。R和S的差是由屬于R但不屬于S的元組組成的集合,其運(yùn)算符為“-”,記為T=R-S。

(3)交(Intersection)。R和S的交是由既屬于R又屬于S的元組組成的集合,其運(yùn)算符為“∩”,記為T=R∩S。

(4)笛卡爾積。R和S的笛卡爾積是R和S的元組兩兩任意組合而得到的結(jié)果,其運(yùn)算符為“×”,記為T=R×S。圖2-7關(guān)系R和S

上述四種運(yùn)算結(jié)果如圖2-8所示。圖2-8關(guān)系R和S的四種集合運(yùn)算結(jié)果

⒉專門的關(guān)系運(yùn)算

專門的關(guān)系運(yùn)算包括選擇、投影、連接和除法運(yùn)算。

假設(shè)關(guān)系R和S如圖2-9所示,下面討論專門的關(guān)系運(yùn)算。圖2-9關(guān)系R和S

1)選擇

從關(guān)系中找出滿足給定條件的元組的操作(where),其中條件以邏輯表達(dá)式給出,值為真的元組將被選取。這種運(yùn)算是從水平方向抽取元組。例如:

select*fromRwhereBin(12,32)

算結(jié)果如圖2-10所示。圖2-10關(guān)系R和S的選擇運(yùn)算結(jié)果

2)投影

從關(guān)系模式中指定若干個(gè)屬性組成新的關(guān)系,這是從列的方向進(jìn)行的運(yùn)算。例如:selectA,BfromR

運(yùn)算結(jié)果如圖2-11所示。圖2-11關(guān)系R和S的投影運(yùn)算結(jié)果

3)連接

將兩個(gè)關(guān)系模式拼接成一個(gè)更寬的關(guān)系模式,生成的新關(guān)系中包含滿足聯(lián)系條件的組合(InnerJoin)。運(yùn)算過程是通過連接條件來控制的,連接條件中將出現(xiàn)以下兩個(gè)關(guān)系中的

公共屬性名或具有相同語義、可比的屬性。

(1)自然連接。

(2)等值連接。例如:

selectA,B,C,E,FfromR,SwhereR.A=S.A

運(yùn)算結(jié)果如圖2-12所示。圖2-12關(guān)系R和S的連接運(yùn)算結(jié)果第3章數(shù)據(jù)庫基礎(chǔ)3.1SQLServer數(shù)據(jù)庫管理系統(tǒng)3.2SQLServerManagementStudio的使用3.3

標(biāo)識(shí)符概述3.4SQLServer內(nèi)置系統(tǒng)數(shù)據(jù)庫3.5SQLServer系統(tǒng)內(nèi)置函數(shù)

3.1SQLServer數(shù)據(jù)庫管理系統(tǒng)

3.1.1SQLServer概述SQLServer是一個(gè)關(guān)系數(shù)據(jù)庫管理系統(tǒng)。它最初是由Microsoft、Sybase和Ashton_x0002_Tate三家公司共同開發(fā)的,于1988年推出了第一個(gè)OS/2版本,隨后推出了SQLServer7.0、SQLServer2000、SQLServer2008、SQLServer2015、SQLServer2019等版本。

3.1.2SQLServer2008R2的安裝

⒈安裝需求

SQLServer2008R2支持32位和64位操作系統(tǒng),這里主要介紹SQLServer2008R264位的安裝需求。

1)硬件需求

(1)處理器:PentiumⅢ兼容處理器或處理速度更快的處理器。CPU最低為1.0GHz,建議不小于2.0GHz。

(2)內(nèi)存:最小512MB,建議不小于2GB。

(3)硬盤:在安裝SQLServer2008R2時(shí),需要系統(tǒng)驅(qū)動(dòng)器提供至少2GB的可用磁盤空間用來存儲(chǔ)WindowsInstaller創(chuàng)建的安裝臨時(shí)文件。安全安裝SQLServer2008R2需要約2GB磁盤空間,SQLServer2008R2各組件磁盤空間需求情況如表3-1所示。

(4)顯示器:VGA或更高分辨率,SQLServer圖形工具要求1024×768像素或更高分辨率。

2)軟件需求

(1)框架支持:安裝SQLServer2008R2所需的軟件組件有SQLServerNativeClient(SQLServer本地客戶端);.NETFramework3.5SP1(.NET框架);SQLServer2008R2安裝程序支持文件。

(2)軟件:MicrosoftWindowsInstaller4.5或更高版本。Microsoft數(shù)據(jù)訪問組件(MDAC)2.8SP1或更高版本。

(3)操作系統(tǒng):Windows10操作系統(tǒng)。

⒉安裝步驟

以Windows10為操作系統(tǒng)平臺(tái),SQLServer2008R2學(xué)習(xí)版安裝文件已經(jīng)下載到D盤的sq文件夾,其安裝過程如下:

(1)展開D:\sq文件夾,雙擊“setup”安裝應(yīng)用程序,如圖3-2所示。圖3-2啟動(dòng)SQLServer2008R2安裝文件

(2)如果出現(xiàn)Microsoft.NETFramework安裝對(duì)話框,則勾選接受許可并安裝。必備組件安裝完成后,安裝向?qū)нM(jìn)入“SQLServer安裝中心”,如圖3-3所示。單擊“全新安

裝或向現(xiàn)有安裝添加功能”選項(xiàng),安裝向?qū)нM(jìn)行“安裝程序支持規(guī)則”檢查。圖3-3SQLServer2008R2安裝中心界面

(3)通過安裝程序支持規(guī)則檢查以后,進(jìn)入“許可條款”操作界面,勾選“我接受許可條款”,如圖3-4所示。再次檢查安裝程序支持文件,如果通過則進(jìn)入“功能選擇”界面。圖3-4“許可條款”界面

(4)在如圖3-5所示的“功能選擇”界面單擊“全選”按鈕,單擊“下一步”,進(jìn)入“實(shí)例配置”界面。注意:“共享功能目錄”的文件夾不可以更改,否則安裝過程出錯(cuò)。圖3-5“功能選擇”界面

(5)在如圖3-6所示的“實(shí)例配置”界面,用戶可以使用默認(rèn)實(shí)例名MSSQLSERVER,也可以選擇命名實(shí)例SQLExpress,實(shí)例根目錄為C:\ProgramFiles\MicrosoftSQLServer\。單擊“下一步”進(jìn)入“服務(wù)器配置”界面。圖3-6“實(shí)例配置”界面

(6)在“服務(wù)器配置”界面,根據(jù)選擇的安裝功能指定SQLServer服務(wù)的登錄賬戶??梢詾樗蠸QLServer服務(wù)分配相同的登錄賬戶,也可以分別配置每個(gè)服務(wù)賬戶,還可

以指定服務(wù)類型為自動(dòng)、手動(dòng)或禁用,如圖3-7所示。圖3-7“服務(wù)器配置”界面

(7)在“數(shù)據(jù)庫引擎配置”界面,可以設(shè)置SQLServer實(shí)例的身份驗(yàn)證模式為Windows身份驗(yàn)證模式或混合模式。在“指定SQLServer管理員”欄,必須至少指定一個(gè)系統(tǒng)管理員,也可以添加或刪除賬戶,如圖3-8所示。單擊“下一步”進(jìn)入“ReportingServices配置”界面。圖3-8“數(shù)據(jù)庫引擎配置”界面

(8)在“ReportingServices配置”界面,指定要?jiǎng)?chuàng)建的ReportingServices安裝的類型:安裝本機(jī)模式默認(rèn)配置、安裝SharePoint集成模式默認(rèn)配置、安裝但不配置報(bào)表服務(wù)器,

如圖3-9所示。單擊“下一步”進(jìn)入“錯(cuò)誤報(bào)告”界面,再單擊“下一步”按鈕,進(jìn)入“安裝規(guī)則”界面,然后進(jìn)入“安裝進(jìn)度”界面。圖3-9“ReportingServices”配置界面

(9)在“安裝進(jìn)度”界面,監(jiān)視安裝進(jìn)度,如圖3-10所示。圖3-10“安裝進(jìn)度”界面

(10)安裝完成后,“完成”頁會(huì)提供指向安裝摘要日志文件以及其他重要說明的鏈接,提示已完成SQLServer安裝過程,單擊“關(guān)閉”按鈕,如圖3-11所示。圖3-11安裝完成界面

3.2SQLServerManagementStudio的使用

SQLServerManagementStudio(簡稱SSMS)是一個(gè)訪問、配置和管理所有SQLServer組件(數(shù)據(jù)庫引擎、AnalysisServices、IntegrationServices、ReportingServices和XQuery等)的集成環(huán)境,提供用于配置、監(jiān)視和管理SQL實(shí)例的工具,使用SSMS部署、監(jiān)視和升級(jí)應(yīng)用程序使用的數(shù)據(jù)層組件,以及生成查詢和腳本,使各種技術(shù)水平的開發(fā)人員和管理員可以通過易用的圖形工具和豐富的腳本編輯器使用和管理SQLServer。

3.2.1啟動(dòng)SQLServer2008R2服務(wù)器

1.使用SQLServer配置管理器啟動(dòng)服務(wù)

SQLServer配置管理器是一種用于管理與SQLServer相關(guān)聯(lián)的服務(wù)、配置SQLServer使用的網(wǎng)絡(luò)協(xié)議以及從SQLServer客戶端計(jì)算機(jī)管理網(wǎng)絡(luò)連接配置的工具。

打開SQLServer配置管理器:開始→所有程序→單擊展開“MicrosoftSQLServer2008R2”→單擊展開“配置工具”→SQLServer配置管理器,如圖3-12所示。

在SQLServer配置管理器中單擊“SQLServer服務(wù)”,在詳細(xì)信息窗格中,右鍵單擊“SQLServer(SQLEXPRESS)”,彈出菜單,然后單擊“啟動(dòng)”即可;反之則可停止。同理,可以啟動(dòng)或停止其他SQLServer服務(wù)(如Analysis、Reporting)。圖3-12SQLServer配置管理器

⒉使用Windows服務(wù)管理器啟動(dòng)服務(wù)

打開Windows服務(wù)管理:在桌面上選中“我的電腦”,右擊鼠標(biāo),在彈出的快捷菜單中選擇“管理”,打開“計(jì)算機(jī)管理”操作界面,單擊“服務(wù)和應(yīng)用程序”→雙擊“SQL

Server配置管理器”→雙擊展開“SQLServer服務(wù)”→右擊“SQLServer(SQLEXPRESS)”→彈出快捷菜單,單擊“啟動(dòng)”按鈕,即可啟動(dòng)SQLServer服務(wù),如圖3-13所示。執(zhí)行類似的操作可以啟動(dòng)其他的選項(xiàng)。圖3-13計(jì)算機(jī)管理啟動(dòng)SQLServer服務(wù)

3.2.2啟動(dòng)SQLServerManagementStudio

單擊“開始”→“所有程序”→單擊展開“MicrosoftSQLServer2008R2”→單擊“SQLServerManagementStudio”,如圖3-14所示。圖3-14SQLServerManagementStudio登錄窗口

SSMS工作界面是一個(gè)標(biāo)準(zhǔn)的Windows界面,由標(biāo)題欄、菜單欄、工具條、屬性面板和樹窗口組成。單擊“新建查詢”,在工作窗口打開腳本文件*.sql文件,進(jìn)入編輯界面,如圖3-15所示。圖3-15SQLServerManagementStudio工作界面

3.3標(biāo)識(shí)符概述

數(shù)據(jù)庫對(duì)象的名稱即為標(biāo)識(shí)符,SQLServer中的所有內(nèi)容都可以有標(biāo)識(shí)符。服務(wù)器、數(shù)據(jù)庫和數(shù)據(jù)庫對(duì)象(例如表、視圖、列、索引、存儲(chǔ)過程、觸發(fā)器、約束及規(guī)則等)也都可以有標(biāo)識(shí)符。

使用標(biāo)識(shí)符要注意以下幾點(diǎn):

(1)標(biāo)識(shí)符必須是統(tǒng)一碼(Unicode2.0)標(biāo)準(zhǔn)中規(guī)定的字符以及其他一些語言字符(如漢字),如表3-2所示。

(2)標(biāo)識(shí)符不能有空格或特殊字符_、#、@、$以外的字符。

(3)標(biāo)識(shí)符不允許是Tansact-SQL的保留字。

(4)標(biāo)識(shí)符長度不得超過128個(gè)字符。

另外,在SQLServer中,還有許多具有特殊意義的標(biāo)識(shí)符,如表3-3所示。

3.4SQLServer內(nèi)置系統(tǒng)數(shù)據(jù)庫

3.4SQLServer內(nèi)置系統(tǒng)數(shù)據(jù)庫1.系統(tǒng)數(shù)據(jù)庫啟動(dòng)SQLServerManagementStudio連接數(shù)據(jù)庫引擎后,展開“數(shù)據(jù)庫”→“系統(tǒng)數(shù)據(jù)庫”文件夾,可以看到master、model、msdb和tempdb4個(gè)系統(tǒng)數(shù)據(jù)庫。具體如下:(1)master:記錄SQLServer系統(tǒng)的所有系統(tǒng)級(jí)別信息,包括登錄賬戶、系統(tǒng)配置和SQLServer初始化信息。

(2)model:用于創(chuàng)建數(shù)據(jù)庫的模板。

(3)msdb:供SQLServer代理程序調(diào)度警報(bào)、作業(yè)和記錄操作員時(shí)使用。

(4)tempdb:保存所有的臨時(shí)表和臨時(shí)存儲(chǔ)過程。每次啟動(dòng)時(shí)都重新創(chuàng)建tempdb,并根據(jù)需要自動(dòng)增長。

⒉報(bào)表數(shù)據(jù)庫

SQLServer中的服務(wù)器除了數(shù)據(jù)庫引擎外,還有AnalysisServices(分析服務(wù)器)、ReportingServices(報(bào)表服務(wù)器)等,其中報(bào)表服務(wù)器使用SQLServer數(shù)據(jù)庫引擎來存儲(chǔ)元數(shù)據(jù)和對(duì)象定義。為了將永久性數(shù)據(jù)存儲(chǔ)與臨時(shí)存儲(chǔ)要求分開,ReportingServices使用兩個(gè)SQLServer關(guān)系數(shù)據(jù)庫用作內(nèi)部存儲(chǔ),在默認(rèn)情況下,這兩個(gè)數(shù)據(jù)庫分別命名為Reportserver和ReportserverTempDB,隨報(bào)表服務(wù)器主數(shù)據(jù)庫一同創(chuàng)建,用于存儲(chǔ)臨時(shí)數(shù)據(jù)、會(huì)話信息和緩存的報(bào)表。根據(jù)本例的數(shù)據(jù)庫實(shí)例名SQLEXPRESS,這兩個(gè)報(bào)表數(shù)據(jù)庫名稱為“Reportserver$-SQL-EXPRESS”和Reportserver$SQLEXPRESSTempDB”。

3.5SQLServer系統(tǒng)內(nèi)置函數(shù)

3.5.1系統(tǒng)函數(shù)系統(tǒng)函數(shù)用于獲取有關(guān)計(jì)算機(jī)系統(tǒng)、用戶、數(shù)據(jù)庫和數(shù)據(jù)庫對(duì)象的信息??梢栽诓恢苯釉L問系統(tǒng)表的情況下,獲取SQLServer系統(tǒng)表中的信息。用戶在得到信息后使用條件語句,根據(jù)返回的信息進(jìn)行不同的操作。與其他函數(shù)一樣,可以在select語句的select和where子句以及表達(dá)式中使用系統(tǒng)函數(shù)。系統(tǒng)函數(shù)的類型如表3-4所示。

例3-1返回圖書信息表books中bookid為1、書名title列的長度及其值的長度。

代碼如下:

selectcol_length('books','title')asname_col_length,datalength(title)astitle_data_length

frombookswherebookid=1

3.5.2字符串函數(shù)

字符串函數(shù)對(duì)二進(jìn)制數(shù)據(jù)、字符串和表達(dá)式執(zhí)行不同的運(yùn)算。此類型函數(shù)作用于char、varchar、binary和varbinary數(shù)據(jù)類型以及可以隱式轉(zhuǎn)換為char或varchar的數(shù)據(jù)類型。

可以在select語句的select和where子句及表達(dá)式中使用字符串函數(shù)。字符串函數(shù)的類型如下。

⒈字符轉(zhuǎn)換函數(shù)

1)ascii()

功能:返回字符表達(dá)式最左端字符的ASCII碼值。

語法:ascii(character_expression)返回類型:int

示例:selectascii(123),ascii('A'),返回結(jié)果為“49”“65”。

2)char()

功能:用于將ascii碼轉(zhuǎn)換為字符。

語法:char(integer_expression)

返回類型:char

示例:selectchar(65),char(123),返回結(jié)果為“A”“{”。

3)lower()

功能:把字符串全部轉(zhuǎn)換為小寫。

語法:lower(character_expression)

返回類型:varchar

示例:selectlower('abc'),lower('A李C'),返回結(jié)果為“abc”“a李c”。

4)upper()

功能:把字符串全部轉(zhuǎn)換為大寫。

語法:upper(character_expression)

返回類型:varchar

示例:selectupper('Abc'),upper('a李c'),返回結(jié)果為“ABC”“A李C”。

5)str()

功能:把數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù)。

語法:str(float_expression[,length[,decimal]])

返回類型:char

說明:length指定返回字符串的長度,decimal指定返回的小數(shù)位數(shù)。如果沒有指定,則length的值為10,decimal缺省值為0。

示例:selectstr(123.5),str(123456,3),str(123.456,8,2),str(-12123.456,8,2),其返回的結(jié)果為“124”“…”“123.46”“-12123.5”。

2.去空格函數(shù)

1)ltrim()

功能:把字符串頭部的空格去掉。

語法:ltrim(character_expression)

返回類型:varchar

示例:selectltrim('A'),返回結(jié)果為“A”。

2)rtrim()

功能:把字符串尾部的空格去掉。

語法:rtrim(character_expression)

返回類型:varchar

示例:selectltrim('A'),rtrim('李'),返回結(jié)果為“A”“李”。

例3-2去掉字符串頭部和尾部的空格。

示例:selectrtrim(ltrim('李')),返回的結(jié)果為“李”。

3.取子串函數(shù)

1)left()

功能:返回從字符串左邊開始指定個(gè)數(shù)的字符。

語法:left(character_expression,integer_expression)

返回類型:varchar

示例:selectleft('ABC',2),left('A西林C',2),其返回的結(jié)果為“AB”“A西”。

2)right()

功能:返回從字符串右邊開始指定個(gè)數(shù)的字符。

語法:right(character_expression,integer_expression)

返回類型:varchar

示例:selectright('ABC',2),right('A西林C',2),其返回的結(jié)果為“BC”“林C”。

3)substring()

功能:返回字符串、binary、text表達(dá)式的一部分。

語法:substring(expression,start,length)

返回類型:varchar,nvarchar,varbinary

示例:selectsubstring('ABC',2,1),substring('ABC',2,4),其返回的結(jié)果為“B”“BC”。

4.字符串比較函數(shù)

1)charindex()

功能:返回字符串中某個(gè)指定的子串出現(xiàn)的起始位置。

語法:charindex(substring_expression,expression[,start_location]),其中substring_expression是所要查找的字符表達(dá)式;expression可為字符串也可為列名表達(dá)式;start_location表示要查詢的開始位置,省略該參數(shù)默認(rèn)為1。如果沒有發(fā)現(xiàn)子串則返回0值。此函數(shù)不能用于text和image數(shù)據(jù)類型。

返回類型:int

示例:selectcharindex('B','ABC'),charindex('AD','ABCD'),charindex('B','ABCDEF',3),其返回的結(jié)果為“2”“0”“0”。

2)replace()

功能:用第三個(gè)表達(dá)式替換第一個(gè)字符串表達(dá)式中出現(xiàn)的所有第二個(gè)給定字符串表達(dá)式。

語法:replace('string_expression1','string_expression2','string_expression3')

返回類型:與表達(dá)式類型一致

示例:selectreplace('ABC','B','12'),replace('ABCD','BD','ERR'),其返回的結(jié)果為“A12C”“ABCD”。

3.5.3日期和時(shí)間函數(shù)

日期和時(shí)間函數(shù)用來顯示關(guān)于日期和時(shí)間的信息,其數(shù)據(jù)類型為datetime和smalldatetime值,可以對(duì)這些值執(zhí)行算術(shù)運(yùn)算,最后將返回一個(gè)字符串、數(shù)字值或日期和時(shí)間值。

1)day()

功能:返回date_expression中的日期值。

語法:day(date_expression)

返回類型:int

示例:selectday('2018-05-01'),day('05/04/2018'),其返回的結(jié)果為“1”和“4”。

2)month()

功能:返回date_expression中的月份值。

語法:month(date_expression)

返回類型:int

示例:selectmonth('2018-05-01'),month('06-01-2018'),其返回的結(jié)果值為“5”和“6”。

3)year()

功能:返回date_expression中的年份值。

語法:year(date_expression)

返回類型:int

示例:selectyear('2018-05-01'),year('06-01-2019'),其返回的結(jié)果值為“2018”和“2019”。

4)getdate()

功能:按datetime數(shù)據(jù)類型格式返回當(dāng)前系統(tǒng)日期和時(shí)間。

語法:getdate()

返回類型:datetime

示例:selectgetdate(),其返回當(dāng)前日期和時(shí)間。

5)datepart()

功能:返回代表指定日期的指定日期部分的整數(shù)。

語法:datepart(datepart,date)

返回類型:int

示例:selectdatepart(year,getdate()),datepart(month,'2018-05-01'),其返回的結(jié)果為“2021”和“5”。

6)dateadd()

功能:在向指定日期加上一段時(shí)間的基礎(chǔ)上,返回新的datetime值。

語法:dateadd(datepart,number,date)

返回類型:datetime

示例:selectdateadd(day,20,'2020-05-01'),其返回的結(jié)果為“2020-05-2100:00:00.000”。

7)datediff()

功能:返回跨兩個(gè)指定日期的日期和時(shí)間邊界數(shù)。

語法:datediff(datepart,startdate,enddate)

返回類型:int

示例:selectdatediff(day,'2018-03-01','2018-05-01'),其返回的結(jié)果為“61”。

3.5.4其他函數(shù)

1.round()

功能:返回?cái)?shù)字表達(dá)式并四舍五入為指定的長度或精度。

語法:round(numeric_expression,length[,function])

返回類型:與numeric_expression相同

示例:selectround(24.567,2),round(24.25,0),其返回的結(jié)果為“24.570”和“24.00”。

2.case()

在T-SQL語句中,可以使用case語句實(shí)現(xiàn)程序中多條件分支。

1)簡單case函數(shù)

功能:將某個(gè)表達(dá)式與一組簡單表達(dá)式進(jìn)行比較以確定結(jié)果。

語法格式:

caseinput_expression

whenwhen_expressionthenresult_expression

[...n]

elseelse_result_expression

end

例3-3查詢學(xué)生信息,將性別以英文顯示。代碼如下:

selectstudno,studname,

學(xué)生性別=casestudsex

when'男'then'male'

when'女'then'female'

else'性別不詳'

end

fromstudinfo

2)case搜索函數(shù)

功能:計(jì)算一組布爾表達(dá)式以確定結(jié)果。

語法格式:

case

whenboolean_expressionthenresult_expression

[...n]

elseelse_result_expression

end

例3-4統(tǒng)計(jì)各學(xué)生的平均分,并按等級(jí)顯示。代碼如下:第4章

關(guān)系數(shù)據(jù)庫語言SQL(上)4.1

SQL概述4.2

SQL的數(shù)據(jù)類型4.3數(shù)據(jù)庫定義4.4數(shù)據(jù)表定義

DevEcoStudio的功能如圖4-1所示,具體如下:

(1)多設(shè)備統(tǒng)一開發(fā)環(huán)境:支持多種HarmonyOS設(shè)備的應(yīng)用開發(fā),包括手機(jī)、平板、車機(jī)、智慧屏、智能穿戴,輕量級(jí)智能穿戴和智慧視覺設(shè)備。

(2)支持多語言的代碼開發(fā)和調(diào)試:包括Java、XML(ExtensibleMarkupLanguage)、C/C++、JS(JavaScript)、CSS(CascadingStyleSheets)和HML(HarmonyOSMarkup

Language)。

(3)支持FA(FeatureAbility)和PA(ParticleAbility)快速開發(fā):通過工程向?qū)Э焖賱?chuàng)建FA/PA工程模板,一鍵式打包成HAP(HarmonyOSAbilityPackage)。

(4)支持分布式多端應(yīng)用開發(fā):一個(gè)工程和一份代碼可跨設(shè)備運(yùn)行,支持不同設(shè)備界面的實(shí)時(shí)預(yù)覽和差異化開發(fā),實(shí)現(xiàn)代碼的最大化重用。

圖4-1DevEcoStudio功能x

4.1SQL概述

結(jié)構(gòu)化查詢語言(StructuredQueryLanguage,SQL)是1974年由Boyce和Chamberlin提出的。1975—1979年,最早是IBM的圣約瑟研究實(shí)驗(yàn)室為其關(guān)系數(shù)據(jù)庫管理系統(tǒng)SYSTEMR開發(fā)的一種查詢語言,它的前身是SQUARE語言。經(jīng)過各公司的不斷修改、擴(kuò)充和完善,1986年美國頒布了SQL的美國標(biāo)準(zhǔn),1987年國際標(biāo)準(zhǔn)化組織將SQL采納為國際標(biāo)準(zhǔn),SQL最終成為關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。

SQL結(jié)構(gòu)簡潔,功能強(qiáng)大,簡單易學(xué),自從IBM公司1981年推出以來,SQL得到了廣泛的應(yīng)用。SQLServer、Oracle、Sybase、Informix等大型的數(shù)據(jù)庫管理系統(tǒng),Visual

Foxpro、PowerBuilder等微機(jī)上常用的數(shù)據(jù)庫開發(fā)系統(tǒng),都支持SQL作為查詢語言。

SQL集數(shù)據(jù)定義(DataDefinition)、數(shù)據(jù)操縱(DataManipulation)和數(shù)據(jù)控制(DataControl)等功能于一體,充分體現(xiàn)了關(guān)系數(shù)據(jù)庫語言的特點(diǎn)和優(yōu)點(diǎn)。

SQL主要由以下幾部分組成:

(1)數(shù)據(jù)定義語言(DataDefinitionLanguage,DDL)。

(2)數(shù)據(jù)操縱語言(DataManipulationLanguage,DML)。

(3)數(shù)據(jù)查詢語言(DataQueryLanguage,DQL)。

(4)數(shù)據(jù)控制語言(DataControlLanguage,DCL)。

4.2SQL的數(shù)據(jù)類型

在計(jì)算機(jī)中數(shù)據(jù)有兩種特征:類型和長度,所謂數(shù)據(jù)類型就是以數(shù)據(jù)的表現(xiàn)方式和存儲(chǔ)方式來劃分?jǐn)?shù)據(jù)的種類。在SQLServer中,每個(gè)列、局部變量、表達(dá)式和參數(shù)都具有一個(gè)相關(guān)的數(shù)據(jù)類型。數(shù)據(jù)類型是一種屬性,用來設(shè)定某一個(gè)具體列保存數(shù)據(jù)的類型。數(shù)據(jù)類型可分為整數(shù)型、精確浮點(diǎn)型、近似浮點(diǎn)型、日期時(shí)間型等10種類型,下面依次介紹。

1.整數(shù)型

整數(shù)型的數(shù)據(jù)范圍及所占字節(jié)如表4-1所示。

2.精確浮點(diǎn)型

精確浮點(diǎn)型的數(shù)據(jù)范圍及所占字節(jié)如表4-2所示。

3.近似浮點(diǎn)型

近似浮點(diǎn)型的數(shù)據(jù)范圍及所占字節(jié)如表4-3所示。

4.日期時(shí)間型

日期時(shí)間型的格式、數(shù)據(jù)范圍及所占字節(jié)如表4-4所示。

5.字符型

字符型的數(shù)據(jù)范圍及所占字節(jié)如表4-5所示。

6.Unicode字符型

Unicode字符型的數(shù)據(jù)范圍及所占字節(jié)如表4-6所示。

7.二進(jìn)制字符型

二進(jìn)制字符型的數(shù)據(jù)范圍及所占字節(jié)如表4-7所示。

8.貨幣型

貨幣型的數(shù)據(jù)范圍及所占字節(jié)如表4-8所示。

9.特殊數(shù)據(jù)類型

特殊數(shù)據(jù)類型如表4-9所示。

10.用戶自定義數(shù)據(jù)類型

在該數(shù)據(jù)庫下創(chuàng)建“圖書”表時(shí),就有了自定義的數(shù)據(jù)類型“pricedecimal”,其總位數(shù)為6,小數(shù)位2位。

4.3數(shù)據(jù)庫定義

4.3.1創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫1)創(chuàng)建數(shù)據(jù)庫的最簡語法創(chuàng)建數(shù)據(jù)庫的最簡語法代碼如下:createdatabasedatabase_name在這種情況下,數(shù)據(jù)庫的參數(shù)設(shè)置都使用系統(tǒng)默認(rèn)值。

例4-1使用SQL語句創(chuàng)建學(xué)生成績數(shù)據(jù)庫studscore_db1,所有參數(shù)均取默認(rèn)值。

操作步驟如下:

(1)在SQLServerManagementStudio中,單擊“新建查詢”,新建SQLQuery1.sql文件。接下來,打開SQLQuery1.sql文件,如圖4-2所示。圖4-2“新建數(shù)據(jù)庫”快捷菜單

(2)在工作界面,在英文狀態(tài)下輸入“createdatabasestudscore_db1”,選定“createdatabasestudscore_db1”,單擊“”按鈕,經(jīng)“分析”提示“命令已成功”,表示沒有錯(cuò)誤,否則提示錯(cuò)誤信息,找出錯(cuò)誤并修改。

(3)單擊“”按鈕,提示“命令已成功完成”。右擊“對(duì)象資源管理器”下面的“數(shù)據(jù)庫”,彈出快捷菜單,單擊“刷新”,可見數(shù)據(jù)庫studscore_db1,創(chuàng)建成功。

(4)單擊“保存”按鈕,保存SQLQuery1.sql文件(該腳本文件以后操作時(shí)還會(huì)用到,打開這個(gè)腳本文件,可以看到以前的操作)。

2)創(chuàng)建數(shù)據(jù)庫的完整語法

(1)on:用來存儲(chǔ)數(shù)據(jù)庫數(shù)據(jù)部分的磁盤文件(數(shù)據(jù)文件)。

(2)n:占位符,表示可重復(fù)前面的定義部分,即還可以有多個(gè)。

(3)logon:用來存儲(chǔ)數(shù)據(jù)庫日志的磁盤文件(日志文件)。

(4)primary:指定關(guān)聯(lián)的<filespec>列表定義主文件。

(5)name:為由<filespec>定義的文件指定邏輯名稱。有以下幾種形式:

例4-2創(chuàng)建數(shù)據(jù)庫studscore_ds1,數(shù)據(jù)文件和日志文件存放在D:\sq,主文件邏輯名稱studscore_ds1_data1,物理文件名studscore_ds1_data1.mdf,初始大小為5MB,最大為無

限大,增長速度10%,日志文件邏輯名稱tudscore_ds1_log1,物理文件名studscore_ds1_log1.ldf,初始大小3MB,最大8MB,增長速度1MB。

操作步驟如下:

第一步:在D盤創(chuàng)建文件夾sq,然后在SQLQuery1.sql文件中,輸入如下代碼:

第二步:選定上述代碼,單擊“”按鈕,提示“命令已成功完成”,再單擊“”按鈕。

第三步:鼠標(biāo)右擊“對(duì)象資源管理器”下的“數(shù)據(jù)庫”,彈出快捷菜單,再單擊“刷新”按鈕,可見創(chuàng)建的數(shù)據(jù)庫studscore_ds1。

例4-3創(chuàng)建數(shù)據(jù)庫studscore_ds2,包括3個(gè)數(shù)據(jù)文件、1個(gè)文件組和1個(gè)日志文件,自主設(shè)置參數(shù)值。

操作步驟同上,代碼如下:

⒉菜單方式創(chuàng)建數(shù)據(jù)庫

操作步驟如下:

(1)在“對(duì)象資源管理器”中找到“數(shù)據(jù)庫”節(jié)點(diǎn),右擊該節(jié)點(diǎn),在彈出的快捷菜單中選擇“新建數(shù)據(jù)庫”命令,彈出如圖4-3所示的對(duì)話框。圖4-3“新建數(shù)據(jù)庫”對(duì)話框(1)

(2)在“新建數(shù)據(jù)庫”對(duì)話框的“常規(guī)”選項(xiàng)卡中,可輸入數(shù)據(jù)庫名稱、數(shù)據(jù)庫文件和事務(wù)日志文件的邏輯名稱,設(shè)置其初始大小、自動(dòng)增長、路徑等參數(shù),如圖4-4所示。

(3)單擊“確定”按鈕,數(shù)據(jù)庫文件創(chuàng)建成功。圖4-4“新建數(shù)據(jù)庫”對(duì)話框(2)

4.3.2刪除數(shù)據(jù)庫

1.命令方式刪除數(shù)據(jù)庫

在SSMS中可以用dropdatabase命令一次刪除一個(gè)或多個(gè)數(shù)據(jù)庫。只有數(shù)據(jù)庫所有者和數(shù)據(jù)庫管理員才有權(quán)執(zhí)行此命令。刪除數(shù)據(jù)庫語法如下:

dropdatabasedatabase_name[,...n]

例4-4刪除例4-1中創(chuàng)建的學(xué)生成績數(shù)據(jù)庫(studscore_db1)。

操作步驟如下:

(1)在SQLQuery1.sql中輸入命令:

dropdatabasestudscore_db1

(2)選中輸入的命令代碼,單擊“”按鈕,無誤則再單擊“”按鈕,顯示“命令已成功”,表示數(shù)據(jù)庫studscore_db1被刪除。

2.菜單方式刪除數(shù)據(jù)庫

在SSMS中可以用菜單方式刪除數(shù)據(jù)庫。例如,刪除在例4-1中創(chuàng)建的學(xué)生成績數(shù)據(jù)庫(studscore_db1)。操作步驟如下:

(1)在“對(duì)象資源管理器”下單擊“數(shù)據(jù)庫”前的“+”,展開數(shù)據(jù)庫文件夾。在數(shù)據(jù)庫“studscore_db1”上右擊鼠標(biāo)彈出快捷菜單,單擊“刪除”命令。

(2)進(jìn)入“刪除對(duì)象”對(duì)話框,勾選“關(guān)閉現(xiàn)有連接(C)”,再單擊“確定”按鈕,如圖4-5所示。圖4-5“刪除數(shù)據(jù)庫”對(duì)話框

4.3.3修改數(shù)據(jù)庫

1.命令方式修改數(shù)據(jù)庫

在SSMS中可以用alterdatabase命令來增加或刪除數(shù)據(jù)庫中的文件,修改文件的屬性。

1)語法格式

alterdatabase命令的語法格式如下:

2)實(shí)際操作

(1)向數(shù)據(jù)庫添加文件,包括數(shù)據(jù)文件、日志文件、文件組。

例4-5修改學(xué)生成績數(shù)據(jù)庫studscore_ds1,添加一個(gè)5MB的次數(shù)據(jù)文件studscore_ds1_data2。

代碼如下:

(2)刪除數(shù)據(jù)庫中的文件、文件組。

例4-6修改學(xué)生成績數(shù)據(jù)庫studscore_ds1,刪除次數(shù)據(jù)文件studscore_ds1_data2。

代碼如下:

alterdatabasestudscore_ds1

removefilestudscore_ds1_data2

2.菜單方式修改數(shù)據(jù)庫

在“對(duì)象資源管理器”下單擊“數(shù)據(jù)庫”前面的“+”,展開數(shù)據(jù)庫文件夾,在需要修改的數(shù)據(jù)庫上右擊鼠標(biāo),彈出快捷菜單,單擊“屬性”選項(xiàng),進(jìn)入“數(shù)據(jù)庫屬性”頁,

在“文件”“文件組”選項(xiàng)卡可以進(jìn)行數(shù)據(jù)庫文件、文件組的“添加”“刪除”等操作。

4.4數(shù)據(jù)表定義

數(shù)據(jù)定義語言(DDL)的主要功能是定義數(shù)據(jù)庫的模式,包括概念模式、外模式和內(nèi)模式。在SQL中對(duì)于不同的模式分別定義了一系列的語句。通過這些語句,數(shù)據(jù)庫管理員(DBA)可以創(chuàng)建和維護(hù)數(shù)據(jù)庫模式結(jié)構(gòu)。數(shù)據(jù)庫的三級(jí)模式結(jié)構(gòu)的核心是概念模式,它在SQL數(shù)據(jù)庫中表現(xiàn)為基本表的集合。

4.4.1數(shù)據(jù)表的構(gòu)成

一個(gè)數(shù)據(jù)表由表名、列和完整性約束構(gòu)成。具體如下:

1.表名

2.列

3.完整性約束

數(shù)據(jù)的完整性就是指存儲(chǔ)在數(shù)據(jù)庫中的數(shù)據(jù)的準(zhǔn)確性和一致性,通過實(shí)體完整性、參照完整性、域完整性和用戶自定義完整性等完整性約束來實(shí)現(xiàn)。具體如下:

1)實(shí)體完整性

實(shí)體完整性也稱行完整性,要求表中不能有重復(fù)的行存在。

2)參照完整性

參照完整性也稱引用完整性,要求相關(guān)數(shù)據(jù)表中的數(shù)據(jù)保持一致性,即主鍵(被參照表)和外鍵之間的關(guān)系能夠得到維護(hù)。設(shè)置外鍵約束(ForeignKey)、存儲(chǔ)過程及觸發(fā)器等

方法加以實(shí)現(xiàn)。

如果被參考表(父表)中的一行被一個(gè)外鍵(books表—categorycode類別代碼)所參照,那么這一行數(shù)據(jù)便不能被直接刪除,用戶也不能直接修改主鍵(categories表—

categorycode)值,如圖4-6所示。圖4-6參照完整性

3)域完整性

域完整性也稱列完整性,指定列的輸入有效性。通過限制列的類型、格式、可能值的范圍等方法加以實(shí)現(xiàn),如設(shè)置檢查約束(check)或規(guī)則。

4)用戶自定義完整性

所有完整性類別都支持用戶定義完整性,包括createtable中所有列級(jí)約束和表級(jí)約束、存儲(chǔ)過程、觸發(fā)器。例如,訂單表orders中,shipdate(發(fā)貨日期)不能早于rderdate(訂

貨日期)。

4.4.2創(chuàng)建表

1.命令方式創(chuàng)建表

1)創(chuàng)建表的命令和語法格式

創(chuàng)建數(shù)據(jù)庫后,需要使用SQL語句createtable創(chuàng)建數(shù)據(jù)表。其語法格式如下:

2)定義列和約束

首先,創(chuàng)建表時(shí)主要是對(duì)列的定義以及添加約束。

其次,表的約束按應(yīng)用范圍分為列級(jí)和表級(jí)約束。

例4-7創(chuàng)建學(xué)生情況表student,包括s#、sname、age、sex等列,帶主鍵、不允許空值、默認(rèn)值等約束。

代碼如下:

例4-8以創(chuàng)建學(xué)生情況表student為例,在創(chuàng)建表時(shí)分別使用列約束和表約束。此時(shí),需要先刪除例4-7創(chuàng)建的表student。代碼如下:

3)創(chuàng)建帶約束的表

(1)primarykey約束。

在SQLServer中,主鍵(primarykey)保證實(shí)體完整性,可以是單列,也可以是多列組合。其特點(diǎn)為:一個(gè)表只能定義一個(gè)主鍵約束;主鍵約束所在列(或組合值)不允許輸

入重復(fù)值;所在列不允許取空值;主鍵約束自動(dòng)在指定的列上創(chuàng)建了一個(gè)唯一性索引,默認(rèn)為聚集索引。

例4-9創(chuàng)建圖書分類表categories,用于存放圖書的類別信息,categorycode設(shè)為主鍵。

代碼如下:

說明:本例中,只有列級(jí)約束,而且該主鍵約束沒有指定約束名,由系統(tǒng)自動(dòng)添加約束名。

例4-10創(chuàng)建選課成績表sc,用于存放學(xué)生的成績,其中s#和c#組成復(fù)合主鍵。代碼如下:

例4-11創(chuàng)建表orderitems,用于存放訂單項(xiàng)目信息,主鍵約束設(shè)置在orderid和bookid列上。代碼如下:

例4-12創(chuàng)建圖書信息表books,用于存放圖書信息,其中bookid設(shè)為主鍵,約束名pk_books_bookid,且bookid設(shè)為標(biāo)識(shí)列,由101開始每次自動(dòng)增長1。代碼如下:

例4-13創(chuàng)建學(xué)生信息表studinfo,代碼如下:

例4-14創(chuàng)建班級(jí)信息表classinfo,代碼如下:

4-15此題在完成例4-16之后進(jìn)行,在customers表中,為customerid列添加主鍵約束,約束名為pk_customers_customerid。代碼如下:

(2)default約束。

默認(rèn)值(default)約束的語法格式如下:

default<值>

default約束的特點(diǎn)為:每個(gè)列只能定義一個(gè)默認(rèn)值;默認(rèn)值不能引用其他列或其他表、視圖或存儲(chǔ)過程;不能放在identity列或timestamp列。

例4-16創(chuàng)建用戶信息表customers,列rating設(shè)為默認(rèn)值約束,默認(rèn)值為5(常量)。

代碼如下:

例4-17使用insert命令向student表中添加一條記錄,輸入下列代碼,并執(zhí)行。

insertintostudent(s#,sname,age)values('2018010101','張真',20)

表student中列sex的值以默認(rèn)值自動(dòng)填充為“男”,其結(jié)果如表4-10所示。

例4-18創(chuàng)建訂單表orders(orderid、orderdate、shipdate、customerid),然后為orderdate列添加一個(gè)默認(rèn)值約束,默認(rèn)值為當(dāng)前系統(tǒng)時(shí)間,當(dāng)前系統(tǒng)時(shí)間由getdate()產(chǎn)生。代碼如下:

altertableorders

addconstraintdf_orders_orderdatedefaultgetdate()fororderdate

(3)unique約束。

唯一性(unique)約束是指表中的某一列或多列不能有相同的兩行或多行數(shù)據(jù)存在。其特點(diǎn)為:不能是主鍵約束所在列;每個(gè)表可以定義多個(gè)唯一性約束;約束所在列不允許輸

入重復(fù)值(或組合值不重復(fù));所在列允許有空值;在指定列自動(dòng)創(chuàng)建一個(gè)唯一性索引,默認(rèn)非聚集索引。

主鍵約束和唯一性約束既有相同點(diǎn),也有不同點(diǎn),具體如下:

相同點(diǎn):關(guān)鍵字值不允許重復(fù);創(chuàng)建唯一性索引來保證實(shí)體完整性。

不同點(diǎn):是否取空值;可以定義一個(gè)還是多個(gè)約束。

unique約束的語法格式如下:

constraintconstraintnameunique[clustered|nonclustered][(column[,...])]

例4-21創(chuàng)建部門信息表department。注意,組合值具有唯一性約束。代碼如下:

nique約束對(duì)空值的處理:若唯一性約束列中有一列不為空,就實(shí)施約束;若唯一性約束列都為空,則不實(shí)施約束,如圖4-7所示。圖4-7唯一性約束

(4)foreignkey約束。

在SQLServer中,使用外鍵(foreignkey)保證參照完整性。外鍵約束用于建立和加強(qiáng)兩個(gè)表之間的連接的一列或多列,也就是表中某列值引用其他表的主鍵列或unique列。

外鍵表的被約束列的取值,必須是主鍵表的被約束列的值。

其特點(diǎn)為:每個(gè)表可以定義多個(gè)外鍵約束;外鍵表中被約束的列必須和主鍵表中被約束的列寬度一致、數(shù)據(jù)類型一致;外鍵約束不能自動(dòng)創(chuàng)建索引;當(dāng)向設(shè)有外鍵約束的表(子表)中插入記錄或更新記錄時(shí),該記錄被約束列的值必須在參照的主鍵表(父表)中存在。

foreignkey約束的語法格式如下:

參數(shù)說明:

·references:指定該外鍵參考哪個(gè)父表中的哪個(gè)主鍵列。

·ondelete:說明如果已創(chuàng)建表中的行具有參照關(guān)系,并且被引用行已從父表中刪除,則對(duì)這些行采取的操作。

·默認(rèn)noaction:表示數(shù)據(jù)庫引擎將引發(fā)錯(cuò)誤,并回滾對(duì)父表中相應(yīng)行的刪除操作。

·cascade:表示級(jí)聯(lián)刪除,如果父表中刪除一行,則將從參照表中刪除相應(yīng)行。

·setnull:表示如果父表中對(duì)應(yīng)的行被刪除,則子表中

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論