數(shù)據(jù)庫基礎(chǔ)教材_第1頁
數(shù)據(jù)庫基礎(chǔ)教材_第2頁
數(shù)據(jù)庫基礎(chǔ)教材_第3頁
數(shù)據(jù)庫基礎(chǔ)教材_第4頁
數(shù)據(jù)庫基礎(chǔ)教材_第5頁
已閱讀5頁,還剩120頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

......./第1章數(shù)據(jù)庫概述本章介紹數(shù)據(jù)庫的一些基本術(shù)語和概念,介紹數(shù)據(jù)管理的幾個階段,以及關(guān)系數(shù)據(jù)庫的一些特點.本章目標(biāo):完成本章內(nèi)容后我們將能夠:掌握數(shù)據(jù)庫的術(shù)語和概念了解數(shù)據(jù)管理的幾個階段掌握關(guān)系型數(shù)據(jù)庫1.1數(shù)據(jù)庫常用的術(shù)語和基本概念〔1數(shù)據(jù)[Data]:是數(shù)據(jù)庫中存儲的基本對象.數(shù)據(jù)在大多數(shù)人頭腦中的第一個反映就是數(shù)字.其實數(shù)字只是最簡單的一種數(shù)據(jù),是數(shù)據(jù)的一種傳統(tǒng)和狹義的理解.廣義的理解,數(shù)據(jù)的種類很多,例如:文字、圖形、圖像、聲音、學(xué)生的檔案記錄、貨運(yùn)的運(yùn)輸情況等.描述事物的符號記錄稱為數(shù)據(jù).描述事物的符號可以是數(shù)字,也可以是文字、圖像、圖形、聲音、語言等,數(shù)據(jù)有多種表現(xiàn)形式,它們都可以經(jīng)過數(shù)字化后存入計算機(jī).舉例:在學(xué)生檔案中,描述一個學(xué)生的一條記錄〔黎明,男,1988-08-08,XX,計算機(jī)專業(yè),2001-07這就是數(shù)據(jù).〔2數(shù)據(jù)庫[DataBase],簡稱DB.數(shù)據(jù)庫,顧名思義,是存放數(shù)據(jù)的倉庫.只不過這個倉庫是在計算機(jī)存儲設(shè)備上,而且數(shù)據(jù)是按一定的格式存放的.所謂數(shù)據(jù)庫是指長期儲存在計算機(jī)內(nèi)的、有組織的、可共享的數(shù)據(jù)集合.數(shù)據(jù)庫中的數(shù)據(jù)按一定的數(shù)據(jù)模型組織、描述和儲存,具有較小的冗余度、較高的數(shù)據(jù)獨立性和易擴(kuò)展性,并可為各種用戶共享.〔3數(shù)據(jù)庫管理系統(tǒng)[DataBaseManagementSystem]簡稱DBMS如何科學(xué)地組織和存儲數(shù)據(jù),如何高效地獲取和維護(hù)數(shù)據(jù),完成這個任務(wù)的是一個系統(tǒng)軟件-數(shù)據(jù)庫管理系統(tǒng).數(shù)據(jù)庫管理系統(tǒng)是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件.數(shù)據(jù)庫管理系統(tǒng)的主要功能:1數(shù)據(jù)定義功能:DBMS提供數(shù)據(jù)定義語言〔DataDefinitionLanguage,簡稱DDL,用戶通過它可以方便地對數(shù)據(jù)庫中的數(shù)據(jù)對象進(jìn)行定義.2數(shù)據(jù)操縱功能:DBMS還提供數(shù)據(jù)操縱語言〔DataManipulationLanguage,簡稱DML,用戶可以使用DML操縱數(shù)據(jù)實現(xiàn)對數(shù)據(jù)庫的基本操作,如查詢、插入、刪除和修改等.3數(shù)據(jù)庫的運(yùn)行管理:數(shù)據(jù)庫在建立、運(yùn)用和維護(hù)時由數(shù)據(jù)庫管理系統(tǒng)統(tǒng)一管理、統(tǒng)一控制,以保證數(shù)據(jù)的安全性、完整性、多用戶對數(shù)據(jù)地并發(fā)使用及發(fā)生故障后的系統(tǒng)恢復(fù).4數(shù)據(jù)庫的建立和維護(hù)功能:它包括數(shù)據(jù)庫初始數(shù)據(jù)的輸入、轉(zhuǎn)換功能,數(shù)據(jù)庫的轉(zhuǎn)儲、恢復(fù)功能,數(shù)據(jù)庫的重組織功能和性能監(jiān)視、分析功能等.這些功能通常是由一些實用程序完成的.數(shù)據(jù)庫管理系統(tǒng)是數(shù)據(jù)庫系統(tǒng)的一個重要組成部分.〔4數(shù)據(jù)庫系統(tǒng)[DataBaseSystem,簡稱DBS]數(shù)據(jù)庫系統(tǒng)一般由數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)〔及其開發(fā)工具、應(yīng)用系統(tǒng)、數(shù)據(jù)庫管理員和用戶構(gòu)成.應(yīng)當(dāng)指出的是,數(shù)據(jù)庫的建立、使用和維護(hù)等工作只靠一個DBMS遠(yuǎn)遠(yuǎn)不夠,還要有專門的人員來完成,這些人被稱為數(shù)據(jù)庫管理員〔DataBaseAdministrator,簡稱DBA.數(shù)據(jù)庫系統(tǒng)是指計算機(jī)系統(tǒng)中引進(jìn)了數(shù)據(jù)庫后的系統(tǒng),其計算機(jī)硬件、軟件如下圖所示.下面用一個實體與數(shù)據(jù)庫系統(tǒng)進(jìn)行比較,例如數(shù)據(jù)庫系統(tǒng)與圖書館的比較.數(shù)據(jù)庫圖書館數(shù)據(jù)圖書外存書庫用戶讀者數(shù)據(jù)模型書卡格式數(shù)據(jù)庫管理系統(tǒng)圖書館管理員數(shù)據(jù)的物理組織方法圖書館圖書存放方法用戶對數(shù)據(jù)庫的操作讀者對圖書館的訪問〔使用數(shù)據(jù)操縱語言對數(shù)據(jù)檢索、插入、刪除、修改〔用普通語言借書、還書等1.2數(shù)據(jù)管理技術(shù)的產(chǎn)生和發(fā)展數(shù)據(jù)庫技術(shù)是應(yīng)數(shù)據(jù)管理任務(wù)的需要而產(chǎn)生的.數(shù)據(jù)的處理是指對各種數(shù)據(jù)進(jìn)行收集、存儲、加工和傳播的一系列活動的總和.數(shù)據(jù)管理則是指對數(shù)據(jù)進(jìn)行分類、組織、編碼、存儲、檢索和維護(hù),它是數(shù)據(jù)處理的中心問題.伴隨著計算機(jī)技術(shù)的不斷發(fā)展,數(shù)據(jù)處理及時地應(yīng)用了這一先進(jìn)的技術(shù)手段,使數(shù)據(jù)處理的效率和深度大大提高,也促使數(shù)據(jù)處理和數(shù)據(jù)管理的技術(shù)得到了很大的發(fā)展,其發(fā)展過程大致經(jīng)歷了人工管理、文件管理、數(shù)據(jù)庫管理及分布式數(shù)據(jù)庫管理等四個階段.數(shù)據(jù)管理三個階段比較人工管理階段文件系統(tǒng)階段數(shù)據(jù)庫系統(tǒng)階段時間-50年代中期50年代后期-60年代中期60年代后期—應(yīng)用背景科學(xué)計算科學(xué)計算、管理大規(guī)模管理硬件背景無直接存取存儲設(shè)備磁盤、磁鼓大容量磁盤軟件背景沒有操作系統(tǒng)有操作系統(tǒng)〔文件系統(tǒng)有DBMS處理方式批處理批處理聯(lián)機(jī)實時處理批處理聯(lián)機(jī)實時處理分布處理數(shù)據(jù)保存方式數(shù)據(jù)不保存以文件的形式長期保存,但無結(jié)構(gòu)以數(shù)據(jù)形式保存,有結(jié)構(gòu)數(shù)據(jù)管理考慮安排數(shù)據(jù)的物理存儲位置與數(shù)據(jù)文件名打交道對所有數(shù)據(jù)實行統(tǒng)一、集中、獨立的管理數(shù)據(jù)與程序數(shù)據(jù)面向程序數(shù)據(jù)與程序脫離數(shù)據(jù)與程序脫離實現(xiàn)數(shù)據(jù)的共享數(shù)據(jù)的管理者人文件系統(tǒng)DBMS數(shù)據(jù)面向的對象某一應(yīng)用程序某一應(yīng)用程序現(xiàn)實世界數(shù)據(jù)的共享程度無共享共享性差共享性高數(shù)據(jù)的冗余度冗余度極大冗余度大冗余度小數(shù)據(jù)的獨立性不獨立,完全依賴于程序獨立性差具有高度的物理獨立性和一定的邏輯獨立性數(shù)據(jù)的結(jié)構(gòu)化無結(jié)構(gòu)記錄內(nèi)有結(jié)構(gòu)整體無結(jié)構(gòu)整體結(jié)構(gòu)化用數(shù)據(jù)模型描述數(shù)據(jù)的控制能力應(yīng)用程序自己控制應(yīng)用程序自己控制由DBMS提供數(shù)據(jù)的安全性、完整性、并發(fā)控制和恢復(fù)能力〔1人工管理階段該階段指20世紀(jì)60年代以前,這一時期的計算機(jī)功能比較簡單,主要用于科學(xué)計算.計算機(jī)外存儲設(shè)備只有磁帶和卡片等,計算機(jī)軟件系統(tǒng)方面,還沒有操作系統(tǒng),也沒有數(shù)據(jù)庫系統(tǒng)等專門的數(shù)據(jù)管理軟件,只有匯編語言.由于缺乏軟件系統(tǒng)的支持,數(shù)據(jù)管理的工作由應(yīng)用程序完成.在應(yīng)用程序中不僅要規(guī)定數(shù)據(jù)的邏輯結(jié)構(gòu),還要設(shè)計數(shù)據(jù)的物理結(jié)構(gòu).這一階段數(shù)據(jù)管理的特點是:不存儲數(shù)據(jù)應(yīng)用程序所對應(yīng)的數(shù)據(jù)不單獨存在,在程序運(yùn)行時由數(shù)據(jù)卡片或數(shù)據(jù)磁帶輸入,運(yùn)算后直接取走結(jié)果,源數(shù)據(jù)與結(jié)果都不保存.不具有數(shù)據(jù)獨立性應(yīng)用程序完全依賴于數(shù)據(jù),不具有數(shù)據(jù)獨立性,一旦數(shù)據(jù)的邏輯結(jié)構(gòu)或物理結(jié)構(gòu)發(fā)生變化,應(yīng)用程序必須做相應(yīng)的修改.數(shù)據(jù)不能共享數(shù)據(jù)是面向應(yīng)用的,一個數(shù)據(jù)集只能對應(yīng)一個應(yīng)用程序.應(yīng)用程序之間不能共享數(shù)據(jù).數(shù)據(jù)大量冗余由于數(shù)據(jù)不能共享,因此即使兩個應(yīng)用程序使用到某些相同的數(shù)據(jù),它們之間也無法相互利用對方的數(shù)據(jù).〔2文件管理階段該階段指20世紀(jì)60年代早期到20世紀(jì)60年代后期.在這個時期,計算機(jī)開始大量用于非數(shù)值計算,磁盤,磁鼓等存儲設(shè)備的出現(xiàn)大大增強(qiáng)了計算機(jī)的存取能力.軟件方面,出現(xiàn)了操作系統(tǒng),數(shù)據(jù)以文件的形式由操作系統(tǒng)的專門軟件——文件管理系統(tǒng),進(jìn)行統(tǒng)一管理.其具有以下特點:數(shù)據(jù)以文件的形式長期保存在計算機(jī)中數(shù)據(jù)統(tǒng)一由操作系統(tǒng)組織成數(shù)據(jù)文件,并長期保存在磁盤存儲器上.用戶通過文件管理系統(tǒng)可以方便地進(jìn)行訪問與修改.數(shù)據(jù)的獨立性有一定的提高由于文件的物理組織由操作系統(tǒng)完成,用戶或者應(yīng)用程序只須根據(jù)數(shù)據(jù)的邏輯結(jié)構(gòu),通過文件名進(jìn)行訪問,無須了解數(shù)據(jù)的物理結(jié)構(gòu),從而提高了數(shù)據(jù)的物理獨立性.文件的組織形式多樣化文件管理系統(tǒng)還為用戶提供了多種文件組織形式,如順序文件組織,索引文件組織,直接文件存取組織等.文件管理系統(tǒng)的出現(xiàn),彌補(bǔ)了手工管理的一些缺陷,使得數(shù)據(jù)管理技術(shù)有了很大的提高,但是它在數(shù)據(jù)管理方面還存在一些不足,主要表現(xiàn)在以下幾點:由于數(shù)據(jù)只能以文件為單位進(jìn)行共享,不能實現(xiàn)以記錄或數(shù)據(jù)項為單位的共享,因此數(shù)據(jù)還存在大量的冗余.數(shù)據(jù)缺乏邏輯獨立性,應(yīng)用程序與數(shù)據(jù)文件之間仍互相依賴,文件的邏輯結(jié)構(gòu)一旦改變,應(yīng)用程序也應(yīng)做相應(yīng)的修改.文件與文件之間相互對立,無法實現(xiàn)文件之間的相互聯(lián)系,不能反映客觀世界事物間的復(fù)雜聯(lián)系.〔3數(shù)據(jù)庫管理階段20世紀(jì)60年代后期至今,由于計算機(jī)技術(shù)的迅速發(fā)展,磁盤存儲技術(shù)取得重要進(jìn)展,計算機(jī)更廣泛地應(yīng)用于管理.隨著數(shù)據(jù)量的劇增,對數(shù)據(jù)管理提出了更高的要求:要求具有更高的獨立性與共享性.文件管理技術(shù)已經(jīng)不能適應(yīng)上述要求.為了進(jìn)一步減少數(shù)據(jù)冗余,滿足多用戶,多應(yīng)用程序的數(shù)據(jù)獨立與高度共享的需求,使數(shù)據(jù)為盡可能多的應(yīng)用程序服務(wù),出現(xiàn)了統(tǒng)一管理數(shù)據(jù)的專門軟件系統(tǒng)——數(shù)據(jù)庫管理系統(tǒng)〔databasemanagementsystem,DBMS.其具有以下特點:數(shù)據(jù)結(jié)構(gòu)化數(shù)據(jù)庫中的數(shù)據(jù)是按照一定的數(shù)據(jù)模型建立起來的相關(guān)的數(shù)據(jù)的集合,它既反映現(xiàn)實世界的客觀事物,也反映事物之間的聯(lián)系.數(shù)據(jù)結(jié)構(gòu)化是數(shù)據(jù)庫系統(tǒng)與文件系統(tǒng)的根本區(qū)別.數(shù)據(jù)獨立性高數(shù)據(jù)庫系統(tǒng)提供了數(shù)據(jù)的邏輯映射與物理映射,這樣,數(shù)據(jù)庫中的數(shù)據(jù)既有邏輯獨立性,又有物理獨立性.用戶只須通過簡單的局部邏輯結(jié)構(gòu)來操作數(shù)據(jù),無須考慮數(shù)據(jù)的全局邏輯結(jié)構(gòu)及物理存儲結(jié)構(gòu).因此確保了較高的數(shù)據(jù)獨立性.實現(xiàn)數(shù)據(jù)的共享與最小冗余數(shù)據(jù)的共享性直接影響到數(shù)據(jù)的冗余度.數(shù)據(jù)庫中的數(shù)據(jù)是面向整個系統(tǒng),而不是面向某個應(yīng)用,可以被多個用戶共享.這樣既可以保證最小的數(shù)據(jù)冗余,又可以避免數(shù)據(jù)的不相容性與不一致性.具有統(tǒng)一的數(shù)據(jù)管理和控制功能數(shù)據(jù)庫系統(tǒng)中由數(shù)據(jù)庫管理系統(tǒng)對數(shù)據(jù)進(jìn)行統(tǒng)一的管理和控制.通過DBMS還可以保證數(shù)據(jù)庫系統(tǒng)中數(shù)據(jù)的安全性,數(shù)據(jù)的完整性,數(shù)據(jù)的并發(fā)訪問控制和數(shù)據(jù)的恢復(fù).數(shù)據(jù)庫技術(shù)在數(shù)據(jù)管理中的特點與優(yōu)勢,使得它在計算機(jī)數(shù)據(jù)管理中占據(jù)主導(dǎo)地位,成為各類信息系統(tǒng)的核心基礎(chǔ).1.2.分布式數(shù)據(jù)庫系統(tǒng)〔DistributedDataBaseSystem,DDBS是在集中式數(shù)據(jù)庫基礎(chǔ)上發(fā)展起來的,是數(shù)據(jù)庫技術(shù)與計算機(jī)網(wǎng)絡(luò)技術(shù)、分布處理技術(shù)相結(jié)合的產(chǎn)物.分布式數(shù)據(jù)庫系統(tǒng)是地理上分布在計算機(jī)網(wǎng)絡(luò)不同結(jié)點,邏輯上屬于同一系統(tǒng)的數(shù)據(jù)庫系統(tǒng),能支持全局應(yīng)用,同時存取兩個或兩個以上結(jié)點的數(shù)據(jù).分布式數(shù)據(jù)庫系統(tǒng)的主要特點是:〔1數(shù)據(jù)是分布的.數(shù)據(jù)庫中的數(shù)據(jù)分布在計算機(jī)網(wǎng)絡(luò)的不同結(jié)點上,而不是集中在一個結(jié)點,區(qū)別于數(shù)據(jù)存放在服務(wù)器上由各用戶共享的網(wǎng)絡(luò)數(shù)據(jù)庫系統(tǒng).〔2數(shù)據(jù)是邏輯相關(guān)的.分布在不同結(jié)點的數(shù)據(jù),邏輯上屬于同一個數(shù)據(jù)庫系統(tǒng),數(shù)據(jù)間存在相互關(guān)聯(lián),區(qū)別于由計算機(jī)網(wǎng)絡(luò)連接的多個獨立數(shù)據(jù)庫系統(tǒng).〔3結(jié)點的自治性.每個結(jié)點都有自己的計算機(jī)軟、硬件資源、數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)〔即LocalDataBaseManagementSystem,LDBMS局部數(shù)據(jù)庫管理系統(tǒng),因而能夠獨立地管理局部數(shù)據(jù)庫.1.3關(guān)系型數(shù)據(jù)庫一個關(guān)系型數(shù)據(jù)庫由多個關(guān)系組成,每個關(guān)系是以二維表的形式組織數(shù)據(jù)的.介紹關(guān)系模型中一些術(shù)語關(guān)系〔Relation:一個關(guān)系對應(yīng)通常說的一張表,如上表所示;元組〔Tuple:表中的一行即為一個元組;屬性〔Attribute:表中的一列即為一個屬性,給每一個屬性起一個名稱即屬性名.如上表有六列,對應(yīng)六個屬性〔學(xué)號,姓名,年齡,性別,系和年級;主碼〔Key:表中的某個屬性組,它可以唯一確定一個元組,如上表中的學(xué)號,可以唯一確定一個學(xué)生,也就稱為本關(guān)系的主碼.域〔Domain:屬性的取值范圍,如人的年齡一般在1~150歲之間,大學(xué)生年齡屬性的域是〔14~38,性別的域是〔男,女,系的域是一個學(xué)校所有系名的集合;分量:元組中的一個屬性值;關(guān)系模式:對關(guān)系的描述,一般表示為:關(guān)系名〔屬性1,屬性2,屬性3,…,屬性n關(guān)系型數(shù)據(jù)庫主要特點:一個關(guān)系〔表由行與列組成.在關(guān)系模式中,能唯一標(biāo)識元組的屬性集稱為超鍵〔superkey;如果一個屬性能唯一標(biāo)識元組,且又不含有多余屬性,那么這個屬性稱為候選鍵〔candidatekey;關(guān)系模式中用戶正在使用的候選鍵稱為主鍵〔primarykey.列是同質(zhì)的,即同列所有分量是同類型的元素;用戶能檢索、查詢表里的數(shù)據(jù)集.用戶能把相關(guān)的表鏈接在一起,以便檢索存儲在不同表中的數(shù)據(jù).關(guān)系數(shù)據(jù)庫中的一個關(guān)系的限制關(guān)系中沒有重復(fù)元組,任意元組在關(guān)系中都是唯一的元組的順序無關(guān)緊要,即元組的次序可以任意交換.屬性的順序是非排序的,即它的次序可以任意交換.屬性必須具有不同的屬性名,不同的屬性可來自同一個域.同一屬性名下的諸屬性值〔同列是同類型數(shù)據(jù),且來自同一個域.所有的屬性值都是原子的關(guān)系數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)絕大多數(shù)數(shù)據(jù)庫系統(tǒng)在總的體系結(jié)構(gòu)上都具有三級模式的特征.三級模式是對數(shù)據(jù)的三個抽象級別:〔1外模式〔用戶模式:也稱為字模式,它是數(shù)據(jù)庫用戶〔包括應(yīng)用程序員和最終用戶能夠看見和使用的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是數(shù)據(jù)庫用戶的數(shù)據(jù)視圖,是與某一應(yīng)用有關(guān)的數(shù)據(jù)的邏輯表示.外模式是保證數(shù)據(jù)庫安全性的一個有力措施.每個用戶只能看見和訪問所對應(yīng)的外模式中的數(shù)據(jù),數(shù)據(jù)庫中的其余數(shù)據(jù)是不可見的.〔2模式〔邏輯模式:是數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是所有用戶的公共數(shù)據(jù)視圖.一個數(shù)據(jù)庫只有一個模式.定義模式時不僅要定義數(shù)據(jù)的邏輯結(jié)構(gòu),例如數(shù)據(jù)記錄由哪些數(shù)據(jù)項構(gòu)成,數(shù)據(jù)項的名字、類型、取值范圍等,而且要定義數(shù)據(jù)之間的聯(lián)系,定義與數(shù)據(jù)有關(guān)安全性、完整性要求.〔3內(nèi)模式〔存儲模式:一個數(shù)據(jù)庫只有一個內(nèi)模式.它是數(shù)據(jù)物理結(jié)構(gòu)和存儲方式的描述,是數(shù)據(jù)在數(shù)據(jù)庫內(nèi)部的表示方式.例如:數(shù)據(jù)是否壓縮存儲,是否加密;數(shù)據(jù)的存儲記錄結(jié)構(gòu)有何規(guī)定等.關(guān)系模型的三類完整性規(guī)則〔1實體完整性規(guī)則〔entityintegrityrule這條規(guī)則要求關(guān)系中元組在關(guān)鍵的屬性上不能有空值.如果出現(xiàn)空值,那么關(guān)鍵值就起不了唯一標(biāo)識元組的作用.〔2引用完整性規(guī)則〔referenceintegrityrule這條規(guī)則要求"不允許引用不存在的元組".這條規(guī)則也稱為"參照完整性規(guī)則".舉例說明:學(xué)生實體和專業(yè)實體可以用下面的關(guān)系表示,其中主碼用下劃線標(biāo)識:學(xué)生〔學(xué)號,姓名,性別,專業(yè)號,年齡專業(yè)〔專業(yè)號,專業(yè)名這兩個關(guān)系之間存在著屬性的引用,即學(xué)生關(guān)系引用了專業(yè)關(guān)系的主碼"專業(yè)號".顯然,學(xué)生關(guān)系中的"專業(yè)號"值必須是確實存在的專業(yè)的專業(yè)號,即專業(yè)關(guān)系中有該專業(yè)的記錄,這也就是說,學(xué)生關(guān)系中的某個屬性的取值需要參照專業(yè)關(guān)系的屬性取值.〔3用戶定義的完整性規(guī)則這是針對某一具體數(shù)據(jù)的約束條件,由應(yīng)用環(huán)境決定.它反應(yīng)某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的語義要求.第2章MySQL軟件安裝本章描述如何在Windows操作系統(tǒng)平臺上安裝MySQL服務(wù)器和客戶端軟件,安裝MySQL服務(wù)器的步驟以及安裝過程中的注意事項,同時還介紹MySQL客戶端的工具的安裝和使用.除了詳細(xì)的操作步驟外,為了讓讀者能更形象地理解安裝過程,還配備大量安裝截屏圖.本章目標(biāo):完成本章內(nèi)容后我們將能夠:掌握MySQL安裝過程熟練MySQL客戶端安裝過程熟練應(yīng)用MySQL客戶端2.1安裝MySQL讀者可以從網(wǎng)站〔上下載MySQL5.0的軟件,解壓后雙擊Setup的文件,幾秒鐘后,會出現(xiàn)圖2.1所示的窗口,這時就可以開始進(jìn)行MySQL的安裝了.選擇窗口中的Next按鈕.這時會出現(xiàn)如圖2.2所示的窗口.圖2.1啟動安裝向?qū)D2.2選擇安裝類型在如圖2.2所示的窗口中,會詢問讀者選擇何種方式安裝MySQL.選擇Complete選項,接著會詢問讀者是否已準(zhǔn)備好安裝.如果已準(zhǔn)備好,那么選擇Next.這是會出現(xiàn)如圖2.3所示的窗口.準(zhǔn)備好后,選擇Install.如果希望更改內(nèi)容,可選擇Back并更改一些安裝參數(shù).如果選擇Install,則安裝過程就會開始并顯示其進(jìn)程,如圖2.4所示.圖2.3準(zhǔn)備安裝MySQL圖2.4MySQL正在安裝中幾秒鐘后,會出現(xiàn)如圖2.5所示的窗口.在該窗口中選擇SkipSign-Up并單擊Next,讀者可在稍后進(jìn)行登記.這時會出現(xiàn)如圖2.6所示的窗口.圖2.5登記窗口圖2.6安裝向?qū)瓿稍趫D2.6中標(biāo)記ConfiguretheMySQLServernow復(fù)選框后,選擇Finish.這時會出現(xiàn)圖2.7所示的窗口.選擇Next,這時會出現(xiàn)如圖2.8所示的窗口.圖2.7開始配置MySQL圖2.8選擇所需要的配置在圖2.8中,選擇StandardConfiguration選項,然后單擊Next.以后,當(dāng)讀者已有了一定經(jīng)驗并具有了MySQL的完整知識后,可以在重新安裝MySQL時選擇DetailedConfiguration選項.在這里選擇DetailedConfiguration選項,選擇Next后,會出現(xiàn)如圖2.9所示的窗口.圖2.9選擇機(jī)器類型在圖2.9中,根據(jù)需要選擇機(jī)器配置類型,選擇DeveloperMachine,選擇Next,會出現(xiàn)如圖2.10所示的窗口.圖2.10選擇應(yīng)用類型在圖2.10中,根據(jù)需要選擇安裝數(shù)據(jù)庫應(yīng)用類型,選擇MultifunctionalDatabase,選擇Next,會出現(xiàn)如圖2.11所示的窗口.圖2.11選擇表空間位置在圖2.11中,根據(jù)需要選擇表空間存放的位置,選擇Next,會出現(xiàn)如圖2.12所示的窗口.圖2.12選擇連接數(shù)目在圖2.12中,根據(jù)需要選擇連接數(shù)目.如果想指定連接數(shù)目,必須選擇ManualSetting,在后面的下拉框中輸入要指定的連接數(shù)目,如不選擇ManualSetting,但是在后面的下拉框中輸入要指定的連接數(shù)目,這是無效的設(shè)置.現(xiàn)在選擇ManualSetting,在后面的下拉框中輸入連接數(shù)目30,選擇Next,會出現(xiàn)如圖2.13所示的窗口.圖2.13選擇網(wǎng)絡(luò)端口在圖2.13中,可以設(shè)置網(wǎng)絡(luò)端口號,默認(rèn)端口號3306,也可以進(jìn)行修改.該端口號會在以后和Java程序進(jìn)行連接時用到.在此建議讀者不要修改端口號.確定端口號之后,選擇Next,會出現(xiàn)如圖2.14所示的窗口.圖2.14選擇字符集在圖2.14中,可以設(shè)置數(shù)據(jù)庫的字符集,以便解決字符亂碼問題,默認(rèn)字符集latin1,也可以進(jìn)行修改.默認(rèn)的字符集不支持漢字,可以選擇gb2312或utf8字符集,就可以支持漢字了.因此在圖2.14中,選擇ManualSelectedDefaultCharacterSet/Collation,在下拉框中選擇需要的字符集,選擇Next,會出現(xiàn)如圖2.15所示的窗口.圖2.15作為WindowsService安裝MySQL在圖2.15中,選擇InstallAsWindowsService選擇并單擊Next.這時會出現(xiàn)圖2.16所示的窗口;此時讀者必須輸入由MySQL創(chuàng)建的用戶口令.該用戶的名稱為root.當(dāng)然,讀者也可以給出自己的新口令;但在本書中,我們假設(shè)讀者使用root.讀者必須輸入該口令兩次.為了安全起見,這些口令以星號的形式出現(xiàn).然后單擊Next.這時會顯示如圖2.17所示的窗口.圖2.16使用root作為口令圖2.17做好開始配置的準(zhǔn)備完成MySQL的配置后,單擊圖2.17所示窗口中的Execute按鈕.這時會出現(xiàn)以復(fù)選標(biāo)記標(biāo)記的配置進(jìn)行的狀態(tài),如圖2.18所示.這個過程只需幾秒鐘時間.當(dāng)該進(jìn)程成功完成后,會出現(xiàn)圖2.19所示的窗口.圖2.18配置正在進(jìn)行中圖2.19MySQL的配置完成選擇圖2.19中的Finish,則安裝過程結(jié)束,且MySQL數(shù)據(jù)庫服務(wù)器已被安裝.為檢查其是否工作正常,可在操作系統(tǒng)的ControlPanel〔控制面板中選擇AdministratorTools〔管理工具,然后選擇Service〔服務(wù),如圖2.20所示.圖2.20MySQL正在運(yùn)行如果MySQL作為一個服務(wù)器出現(xiàn)在圖2.20所示的列表中,則表明MySQL正在運(yùn)行.下一個問題是讀者是否使用數(shù)據(jù)庫服務(wù)器,換言之,讀者是否可成功登錄.這很容易檢查,方法是從任務(wù)欄啟動程序MySQLCommandLineClient,如圖2.21所示.圖2.21啟動MySQLCommandLineClient程序MySQLCommandLineClient程序會要求用戶輸入口令root.輸入該口令后,會出現(xiàn)如圖2.22所示的窗口.在該窗口中,輸入如下這條簡單的SQL語句〔不要遺漏分號并按回車鍵:selectversion〔;圖2.22MySQLCommandLineClient程序需要口令結(jié)果顯示在圖2.23中.如果一切工作正常,在圖2.23中鍵入exit關(guān)閉窗口.這時表明已正確地安裝了MySQL.圖2.23一切工作正常2.2MySQL客戶端工具2.2.1客戶端工具〔Navicat8安裝雙擊"navicat8_mysql_cs.exe"文件,出現(xiàn)如圖2.24所示的窗口.圖2.24Navicat開始安裝界面單擊"下一步"按鈕,進(jìn)入圖2.25所示的窗口.圖2.25是否同意協(xié)議在圖2.25中,選擇"我同意",可以繼續(xù)安裝,選擇"我不同意"就不可以繼續(xù)安裝,這里選擇"我同意",點擊"下一步"按鈕,進(jìn)入圖2.26所示的窗口.圖2.26選擇安裝路徑在圖2.26中,選擇安裝路徑.點擊"下一步"按鈕,進(jìn)入圖2.27所示的窗口.圖2.27選擇開始目錄在圖2.27中,輸入快捷方式文件夾名稱.點擊"下一步"按鈕,進(jìn)入圖2.28所示的窗口.圖2.28創(chuàng)建快捷方式圖標(biāo)在圖2.28中,選擇"Createadesktopicon",可以在桌面上自動創(chuàng)建快捷圖標(biāo);選擇"CreateaQuickLaunchicon",在快速啟動中創(chuàng)建快捷圖標(biāo),這里選擇"Createadesktopicon",點擊"下一步"按鈕,進(jìn)入圖2.29所示的窗口.圖2.29準(zhǔn)備安裝在圖2.29中,選擇"安裝",開始進(jìn)行安裝,進(jìn)入圖2.30所示的窗口.圖2.30安裝進(jìn)度在圖2.30中經(jīng)過幾秒鐘,安裝就完成,出現(xiàn)圖2.31所示的窗口.圖2.31安裝完成在圖2.31中,點擊"完成",安裝完成.然后按照圖2.32所示的窗口,進(jìn)入客戶端的連接界面如圖2.33所示.圖2.32啟動客戶端程序圖2.33客戶端連接MySQL在圖2.33界面上,點擊"連接",進(jìn)入圖2.34所示的窗口.圖2.34連接參數(shù)在圖2.34中,輸入"連接名"信息,輸入密碼,如圖2.35所示.圖2.35參數(shù)設(shè)置在圖2.35中,點擊"連接測試"按鈕,測試一下數(shù)據(jù)庫連接狀態(tài),如果成功就出現(xiàn)圖2.36所示的界面,點擊"確定"按鈕,進(jìn)入圖2.37所示的客戶端主界面.圖2.36測試成功圖2.37客戶端主界面在圖2.37中,將鼠標(biāo)移動到左邊樹結(jié)構(gòu)的跟結(jié)點上,點擊鼠標(biāo)右鍵,選擇"創(chuàng)建數(shù)據(jù)庫",如下圖2.38所示的界面.圖2.38創(chuàng)建新數(shù)據(jù)庫在圖2.38中,點擊"創(chuàng)建數(shù)據(jù)庫",進(jìn)入下圖2.39所示的界面.圖2.39設(shè)置數(shù)據(jù)庫名稱和字符集在圖2.39中,輸入數(shù)據(jù)庫名稱〔imti,同時要選擇數(shù)據(jù)庫中的字符集〔utf8,在整理下拉列表中選擇utf8_general_ci,這一點需要注意,一般與安裝MySQL服務(wù)器端字符集相對應(yīng),否則漢字會出現(xiàn)亂碼.在圖2.39中,配置完成后,單擊"確定"按鈕,進(jìn)入下如圖2.40所示的界面.圖2.40數(shù)據(jù)庫管理界面在圖2.40中,點擊左邊的樹結(jié)構(gòu)中的數(shù)據(jù)庫"imti",然后在單擊"imti"下的"表",在"表"上點擊鼠標(biāo)右鍵,如下圖2.41所示的界面.圖2.41創(chuàng)建表在圖2.41中,選擇"創(chuàng)建表",在圖2.42中創(chuàng)建表中的字段〔包括字段名稱、類型、長度、是否允許為空、主鍵等信息,這里需要注意的是,當(dāng)字段類型為字符串類型時,要選擇字符集與當(dāng)初安裝數(shù)據(jù)庫的字符集一致〔utf8,整理下拉列表中選擇對應(yīng)的信息,如圖2.42所示.圖2.42創(chuàng)建表結(jié)構(gòu)創(chuàng)建表結(jié)構(gòu)完成后,點擊"保存"按鈕,彈出保存窗口,如圖2.43所示.圖2.43輸入表名稱在圖2.43中,輸入數(shù)據(jù)表名稱之后,點擊"確定"按鈕,這樣就創(chuàng)建表結(jié)構(gòu)完成.關(guān)于怎樣修改表結(jié)構(gòu)、刪除表結(jié)構(gòu),這里就不作詳細(xì)介紹了.第3章關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQLSQL是結(jié)構(gòu)化查詢語言StructuredQueryLanguage的縮寫.查詢是SQL語言的重要組成部分,但不是全部,SQL還包括數(shù)據(jù)定義、數(shù)據(jù)操縱和數(shù)據(jù)控制功能等部分.SQL已經(jīng)成為關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)數(shù)據(jù)語言.SQL〔StructuredQueryLanguage語言是1974年由Boyce和Chamberlin提出的.1975~1979年,IBM公司的SanJoseResearchLaboratory研制了著名的關(guān)系數(shù)據(jù)庫管理系統(tǒng)原型SystemR,并實現(xiàn)了這種語言.經(jīng)過各公司的不斷修改、擴(kuò)充和完善,1987年,SQL語言最終成為關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言.1986年美國頒布了SQL語言的美國標(biāo)準(zhǔn),1987年國際標(biāo)準(zhǔn)化組織將其采納為國際標(biāo)準(zhǔn).SQL由于其使用方便、功能豐富、語言簡潔易學(xué)等特點,很快得到推廣和應(yīng)用.SQL語言集數(shù)據(jù)定義〔datadefinition、數(shù)據(jù)操作〔datamanipulation和數(shù)據(jù)控制〔datacontrol功能于一體,充分體現(xiàn)了關(guān)系數(shù)據(jù)庫語言的特點和優(yōu)點.本章目標(biāo):完成本章內(nèi)容后我們將能夠:掌握SQL簡史及功能特性了解SQL語句的結(jié)構(gòu)掌握常量的使用掌握SQL的數(shù)據(jù)類型掌握表達(dá)式和運(yùn)算符的使用了解控制語句的分類和規(guī)則3.1SQL概述SQL語言簡單易學(xué)、風(fēng)格統(tǒng)一,利用簡單的幾個英語單詞的組合就可以完成所有的功能.它不僅包含數(shù)據(jù)查詢功能,還包括插入、刪除、更新和數(shù)據(jù)定義功能.SQL的用戶可以是應(yīng)用程序,也可以是終端用戶.3.1.1SQL和SQL標(biāo)準(zhǔn)簡史SQL語言是IBM公司在20世紀(jì)70年代開發(fā)的關(guān)系數(shù)據(jù)庫原型SYSTEMR的一部分.在20世紀(jì)70年代初,Dr.E.F.Codd首先提出了關(guān)系模型.70年代中期,IBM公司在研制SYSTEMR關(guān)系數(shù)據(jù)庫管理系統(tǒng)中研制了SQL語言.1986年美國國家標(biāo)準(zhǔn)協(xié)會和國際標(biāo)準(zhǔn)化組織發(fā)布的ANSI/ISO標(biāo)準(zhǔn)正式確認(rèn)SQL的標(biāo)準(zhǔn)地位.1989年.美國ANSI采納在ANSIX3.135-1989報告中定義的關(guān)系數(shù)據(jù)庫管理系統(tǒng)的SQL標(biāo)準(zhǔn)語言,稱為ANSISQL89.SQL語言主要包括數(shù)據(jù)定義、數(shù)據(jù)控制、數(shù)據(jù)操縱和數(shù)據(jù)查詢等功能,其中最重要的是數(shù)據(jù)查詢功能.SQL是一種非過程化語言.不過,大多數(shù)數(shù)據(jù)庫系統(tǒng)對SQL進(jìn)行了有針對性的擴(kuò)展使它們成為了過程化語言.現(xiàn)在SQL廣泛地被采用,它使全部用戶,包括應(yīng)用程序員、DBA管理員和終端用戶受益匪淺,其優(yōu)點主要有以下幾點:非過程化語言:非關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操縱語言是面向過程的,若要完成某項請求,必須指定存取路徑,而SQL是一個非過程化的語言,它讓數(shù)據(jù)庫系統(tǒng)負(fù)責(zé)決定怎樣處理數(shù)據(jù)的查詢問題.當(dāng)進(jìn)行數(shù)據(jù)操作時,只要指出要做什么,而無需指出怎么做,因此用戶無需了解存取路徑,存取路徑的選擇以及SQL語句的操作過程由系統(tǒng)自動完成,這樣提高了數(shù)據(jù)的獨立性.綜合統(tǒng)一:非關(guān)系模型的數(shù)據(jù)語言分為模式定義語言和數(shù)據(jù)操縱語言,其缺點是,當(dāng)要修改模式時,必須停止現(xiàn)有數(shù)據(jù)庫的運(yùn)行,轉(zhuǎn)儲數(shù)據(jù),修改模式并編譯后再重裝數(shù)據(jù)庫,因此很麻煩.SQL集數(shù)據(jù)定義、數(shù)據(jù)操縱和數(shù)據(jù)控制功能于一體,語言風(fēng)格統(tǒng)一,可獨立完成數(shù)據(jù)庫生命周期的所有活動,包括定義關(guān)系模式、查詢、更新、建立數(shù)據(jù)庫、數(shù)據(jù)庫安全性控制等一系列操作的要求,這就為數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)提供了良好的環(huán)境.可移植性:由于所有主要的關(guān)系數(shù)據(jù)庫管理系統(tǒng)都支持SQL語言,用戶可將使用SQL的技能從一個RDBMS轉(zhuǎn)到另一個,所以用SQL編寫的程序都是可以移植的.兩種使用方式:第一個方式,用戶可以在終端鍵盤上鍵入SQL命令,對數(shù)據(jù)庫進(jìn)行操作,稱之為自含式語言.第二種方式,將SQL語言嵌入到高級語言程序中,此為嵌入語言.在這兩種不同的使用方式下,SQL語言的語法結(jié)構(gòu)基本上是一致的,它以統(tǒng)一的語法結(jié)構(gòu)提供兩種不同的使用方法,為用戶提供了極大的靈活性與方便性.語言簡潔,易學(xué)易用:SQL語言功能極強(qiáng),但由于設(shè)計巧妙,語言十分簡潔,而且SQL語言語法簡單.完成數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)控制的核心功能只用了9個動詞:CREATE、DROP、ALTER、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE等,因此易于學(xué)習(xí),容易使用.3.1.2SQL的功能和特性SQL是應(yīng)用程序與DBMS進(jìn)行通信的一種語言和工具,將DBMS的組件聯(lián)系在一起,可以為用戶提供強(qiáng)大的功能,使用戶可以方便地進(jìn)行數(shù)據(jù)庫的管理、數(shù)據(jù)的操作.通過SQL命令,程序員或數(shù)據(jù)庫管理員〔DBA可以完成以下功能.·數(shù)據(jù)定義:SQL能讓用戶自己定義所存儲數(shù)據(jù)的結(jié)構(gòu),以及所存儲數(shù)據(jù)各項之間的關(guān)系.·數(shù)據(jù)更新:SQL為用戶和應(yīng)用程序提供了添加、刪除、修改等數(shù)據(jù)更新操作,使用戶或應(yīng)用程序可以向數(shù)據(jù)庫中增加新的數(shù)據(jù)、刪除舊的數(shù)據(jù)以及修改已有數(shù)據(jù),有效地支持了數(shù)據(jù)庫數(shù)據(jù)的更新.·數(shù)據(jù)查詢:SOL使用戶或應(yīng)用程序可以從數(shù)據(jù)庫中按照自己的需要查詢數(shù)據(jù)并組織使用它們,SQL不僅支持簡單條件的檢索操作,而且支持子查詢、查詢的嵌套、視圖等復(fù)雜的查詢.·保護(hù)數(shù)據(jù)安全:SQL能對用戶和應(yīng)用程序訪問數(shù)據(jù)、添加數(shù)據(jù)等操作的權(quán)限進(jìn)行限制,以防止未經(jīng)授權(quán)的訪問,有效地保護(hù)數(shù)據(jù)庫的安全.·維持?jǐn)?shù)據(jù)完整性:SQL使用戶可以定義約束規(guī)則,定義的規(guī)則將存在于數(shù)據(jù)庫內(nèi)部,可以防止因數(shù)據(jù)庫更新過程中的意外或系統(tǒng)錯誤而導(dǎo)致的數(shù)據(jù)庫崩潰.·修改數(shù)據(jù)庫結(jié)構(gòu):SQL使用戶或應(yīng)用程序可以修改數(shù)據(jù)庫的結(jié)構(gòu).·SQL是一種易于理解的語言,同時又是綜合管理數(shù)據(jù)的工具.作為現(xiàn)在數(shù)據(jù)庫市場普通應(yīng)用的語言,它具有以下一些特性.·確定的標(biāo)準(zhǔn):美國國家標(biāo)準(zhǔn)協(xié)會〔ANSI和國際標(biāo)準(zhǔn)化組織〔ISO在1986年制訂了SQL的標(biāo)準(zhǔn),并在1989年、1992年與1999年三次進(jìn)行了擴(kuò)展,使得所有廠商都可以按照統(tǒng)一標(biāo)準(zhǔn)實現(xiàn)對SQL的支持,SQL語言在數(shù)據(jù)庫廠家之間具有廣泛的適用性.雖然在不同廠家之間SQL語言的實現(xiàn)方式存在某些差異,但是通常情況下無論選擇何種數(shù)據(jù)庫平臺,SQL語言都保持相同.·軟件提供商的獨立性:所有主流的DBMS軟件提供商均提供對SQL的支持,SQL標(biāo)準(zhǔn)的確立使不同的廠商可以獨立地進(jìn)行DBMS軟件的設(shè)計,查詢、報表生成器等數(shù)據(jù)庫工具能在許多不同類型的SQL數(shù)據(jù)庫中使用.·各大公司的支持:SQL由IBM研究人員發(fā)明,然后得到了Microsoft公司、Oracle公司等數(shù)據(jù)庫市場各大軟件公司的支持,保證了SQL今后的發(fā)展.·數(shù)據(jù)的多視化:可以通過使用SQL產(chǎn)生不同的報表和視圖,將數(shù)據(jù)庫中數(shù)據(jù)從用戶所需的角度顯示出來供用戶使用,具有很大的靈活性.同時,SQL的視圖功能也能提高數(shù)據(jù)庫的安全性,并且能滿足特定用戶的需要.·程序化數(shù)據(jù)庫訪問:SQL語句既能用于交互式訪問也能用于程序化訪問,這樣應(yīng)用程序就具有很大的靈活性,可以將這兩種方式結(jié)合起來設(shè)計更好的程序.·可移植性:基于SQL的數(shù)據(jù)庫產(chǎn)品能在不同計算機(jī)上運(yùn)行,也支持在不同的操作系統(tǒng)上運(yùn)行,還可以通過網(wǎng)絡(luò)進(jìn)行訪問和管理.·應(yīng)用程序的支持:在數(shù)據(jù)庫發(fā)展的初期,SQL支持基于主機(jī)的應(yīng)用程序;隨著計算機(jī)技術(shù)的發(fā)展,客戶機(jī)/服務(wù)器體系結(jié)構(gòu)出現(xiàn),SQL使每個系統(tǒng)處于最佳工作狀態(tài);而Internet和WWW的迅速發(fā)展,建立了以SQL作為應(yīng)用程序和數(shù)據(jù)庫連接的標(biāo)準(zhǔn);Java的出現(xiàn)也引入了SQL,SQL在最新的編程語言中有了有效的應(yīng)用.·可擴(kuò)展性和對象:面向?qū)ο缶幊碳夹g(shù)的興起,使數(shù)據(jù)庫市場也面臨對象技術(shù)的引入,各個SQL數(shù)據(jù)庫廠商正在擴(kuò)展和提高SQL對對象的支持.3.1.3SQL語句的結(jié)構(gòu)所有的SQL語句均有自己的格式,每條SQL語句由一個謂詞開始,謂詞描述該語句要產(chǎn)生的動作.因此,SQL語句可以被劃分為3個部分:SQL操作、目標(biāo)和條件.SQL操作和目標(biāo)是必要的,至于條件,則根據(jù)執(zhí)行的SQL操作決定其是否可選.〔1SQL操作SQL操作語句有4種基本操作:SELECT、INSERT、UPDATE、DELETE.每一個操作都是SQL語句名.這些操作語句在后面的章節(jié)將分別進(jìn)行介紹.〔2目標(biāo)所有的SQL操作語句都在一個或多個數(shù)據(jù)庫表或視圖上進(jìn)行操作.目標(biāo)組件的目的是定義那些表或視圖.根據(jù)使用的語句不同,該組件也不同,例如,SELECT和DELETE語句具有相似的目標(biāo)結(jié)構(gòu),而INSERT和UPDATE語句則具有不同的目標(biāo)結(jié)構(gòu).〔3條件使用WHERE條件語句說明的條件定義了被SELECT、UPDATE或DELETE語句操作的特定行,而它最終是求得每行數(shù)據(jù)的TRUE或FALSE值,而且該行為控制了該操作是否發(fā)生在每一行上.3.1.4SQL的未來以訪問二維表數(shù)據(jù)為主的SQL和XML的結(jié)合成了SQL的一個發(fā)展方向.SQL和XML結(jié)合的第一步是將關(guān)系型數(shù)據(jù)作為XML格式發(fā)布.XML發(fā)布是合乎邏輯的起點,因為它可以容易地在XML中代表SQL結(jié)果集合,因為很多的動態(tài)網(wǎng)頁都是由SQL查詢來提供的.傳統(tǒng)的方法要求用程序訪問結(jié)果集合和用程序構(gòu)建網(wǎng)頁.新方法以完全公布的方式制作動態(tài)網(wǎng)頁,利用SQL-to-XML查詢生成數(shù)據(jù)的XML表示,并利用XSLT〔可擴(kuò)展樣式表語言轉(zhuǎn)換將XML融入到HTML中.最初這些虛擬文檔是利用專有的SQL擴(kuò)展來創(chuàng)建的.現(xiàn)在有了一種叫做SQL/XML的新ISO/ANSI標(biāo)準(zhǔn),這項標(biāo)準(zhǔn)定義了一種通用的方法.目前,SQL/XML得到了Oracle和DB2的支持.它定義了用于這些產(chǎn)品中的本機(jī)XML數(shù)據(jù)類型的面向XML的運(yùn)算符.不過,SQLServer現(xiàn)在還不支持XML數(shù)據(jù)類型或SQL/XML擴(kuò)展.3.2常量常量也稱為字面值或標(biāo)量值,是表示一個特定數(shù)據(jù)值的符號.常量的格式取決于它所表示的值的數(shù)據(jù)類型.同其他編程語言一樣,SQL也提供了對常量的支持,以方便用戶更好更靈活地使用SQL語句.SQL支持?jǐn)?shù)字、字符串、時間和日期、符號常量等4種常量.3.2.1數(shù)字常量整數(shù)和浮點數(shù)類型的數(shù)據(jù)都可以作為常量使用.整形常量由沒有用引號括起來且不含小數(shù)點的一串?dāng)?shù)字表示,例如11111.在Danwei數(shù)據(jù)表中,如果想列出編號在15以上的員工的名字,可以使用下面的SQL語句:SELECTnameSELECTnameFROMDanweiWHEREid>15在SQL中,常量前面也可以加上加號或減號.如+700,-100等.對于浮點數(shù)據(jù)類型的常量,通常規(guī)定使用符號E,如6.25E5,+6.25E5,6.05E-7.其中,E代表"乘以10的幾次方".所以,6.25E5就代表常量6.25×字符串常量字符串常量括在單引號內(nèi)并包含字母數(shù)字字符〔a~z、A~Z和0~9以及特殊字符,如感嘆號〔!、at符〔@和數(shù)字號〔#.字符串常量的引入,大大方便了人們使用SQL語句,如查詢、添加等操作.例如,在Danwei數(shù)據(jù)庫中,查找名字叫作"王五"的工作人員的詳細(xì)情況,可以使用下面的SQL.語句:SELECT*SELECT*FROMDanweiWHEREname=’王五’SQL標(biāo)準(zhǔn)中規(guī)定,字符串常量要包括在單引號中,例如’王五’、’張三’、’李四’,如果字符串常量中包括單引號,在其之前再加上一個單引號,以表示其是字符串常量中的一個字符,如:’Idon"tknow’.注意:如果單引號中的字符串包含一個嵌入的引號,可以使用兩個單引號表示嵌入的單引號.對于嵌入在雙引號中的字符串則沒有必要這樣做.空字符串用中間沒有任何字符的兩個單引號來表示.注意:如果單引號中的字符串包含一個嵌入的引號,可以使用兩個單引號表示嵌入的單引號.對于嵌入在雙引號中的字符串則沒有必要這樣做.空字符串用中間沒有任何字符的兩個單引號來表示.3.2.3時間和日期常量在使用時,也要將時間和日期常量用單引號括起來.例如:’04/15/99’〔日期常量,’15:30:20’〔時間常量.如果要在Danwei數(shù)據(jù)庫中查詢啟動時間早于SELECT*SELECT*FROMDanweiWHEREgongcheng<TO_DATE〔‘2008-02-02’,’該例中使用了Oracle數(shù)據(jù)庫系統(tǒng)中的TO_DATE函數(shù),來將一個字符串常量轉(zhuǎn)換為Oracle的內(nèi)部數(shù)據(jù)格式.大多數(shù)數(shù)據(jù)庫系統(tǒng)都提供了時間和日期的轉(zhuǎn)換函數(shù),以使系統(tǒng)中時間和日期的格式得以統(tǒng)一.注意:通常時間和日期的使用都必須結(jié)合轉(zhuǎn)換函數(shù)一起使用,以保證進(jìn)行操作時,時間和日期的格式是相同的.注意:通常時間和日期的使用都必須結(jié)合轉(zhuǎn)換函數(shù)一起使用,以保證進(jìn)行操作時,時間和日期的格式是相同的.3.2.4符號常量除了上面3種常量外,SQL語言還包含了許多特殊的符號常量,如CURRENT_DATE、USER、SYSTEM_USER、SESSION_USER等等.這些都是在當(dāng)前數(shù)據(jù)庫系統(tǒng)中使用得比較多且很有用的符號常量.例如,在Danwei數(shù)據(jù)庫中,查詢當(dāng)前正在進(jìn)行的項目的信息,可以使用下面的SQL語句:SELECT*SELECT*FROMDanweiWHEREgongcheng<CURRENT_DATE符號常量CURRENT_DATE能生成當(dāng)前日期的值.注意:在某些數(shù)據(jù)庫產(chǎn)品中,是通過內(nèi)嵌函數(shù)而不是符號常量來訪問系統(tǒng)值,如在Sybase中是通過GETDATE〔函數(shù).注意:在某些數(shù)據(jù)庫產(chǎn)品中,是通過內(nèi)嵌函數(shù)而不是符號常量來訪問系統(tǒng)值,如在Sybase中是通過GETDATE〔函數(shù).3.3數(shù)據(jù)類型如果您曾經(jīng)使用過某種編程語言,那么一定對數(shù)據(jù)類型的概念很熟悉.數(shù)據(jù)類型是數(shù)據(jù)的一種屬性,代表數(shù)據(jù)所表示信息的類型.關(guān)系數(shù)據(jù)庫提供了很大范圍的數(shù)據(jù)類型供用戶使用,包括字符串?dāng)?shù)據(jù)類型、數(shù)字?jǐn)?shù)據(jù)類型、日期時間數(shù)據(jù)類型及大型對象等.關(guān)系數(shù)據(jù)庫中的字符串?dāng)?shù)據(jù)類型基本上也可以擁有其他類型的數(shù)據(jù),但這些數(shù)據(jù)只是作為字符串來對待的.目前,大多數(shù)的關(guān)系數(shù)據(jù)庫系統(tǒng)產(chǎn)品均提供了豐富的數(shù)據(jù)類型,并且在不同的系統(tǒng)中,提供的數(shù)據(jù)類型有一定的差異.有時甚至在兩種系統(tǒng)中名稱相同的數(shù)據(jù)類型,其表達(dá)的含義也可能不相同.另外,字符串?dāng)?shù)據(jù)、時間數(shù)據(jù)在SQL語句中使用時都必須用單引號包括,而數(shù)字?jǐn)?shù)據(jù)則不必包括在單引號中.若將數(shù)字?jǐn)?shù)據(jù)包括在單引號中,它將被作為字符串?dāng)?shù)據(jù)來對待.這是數(shù)字?jǐn)?shù)據(jù)類型和其他數(shù)據(jù)類型之間一個重要的差異.3.3.1數(shù)字?jǐn)?shù)據(jù)類型數(shù)字?jǐn)?shù)據(jù)類型是可以不進(jìn)行數(shù)據(jù)轉(zhuǎn)換而直接參與算術(shù)運(yùn)算的數(shù)據(jù),即數(shù)字?jǐn)?shù)據(jù)類型可以直接在數(shù)學(xué)表達(dá)式中使用.數(shù)字?jǐn)?shù)據(jù)類型在使用時不必包括在單引號中.一般來說,數(shù)字?jǐn)?shù)據(jù)類型可以分成兩類:·整數(shù)數(shù)據(jù)類型:整數(shù)數(shù)據(jù)類型只存儲整數(shù),通常叫做INTEGER、INT、NUMBER等.這種數(shù)據(jù)類型的列一般存儲的是計數(shù)值、數(shù)量或年齡等.所有的關(guān)系數(shù)據(jù)庫系統(tǒng)都提供了對算術(shù)運(yùn)算符的支持,提供了用于整數(shù)計算的聚集函數(shù)以計算所有數(shù)值的最大值、最小值、總值、平均值以及計數(shù)值.·浮點數(shù)數(shù)據(jù)類型:浮點數(shù)數(shù)據(jù)類型存儲的是浮點數(shù),通常稱精確的小數(shù)數(shù)字為DECIMAL或NUMERIC,一般的浮點數(shù)稱為FLOAT、REAL.等.對于精確的小數(shù)通??梢远x它們的精度〔小數(shù)點兩邊數(shù)字的個數(shù)和位數(shù)〔小數(shù)點后數(shù)字的個數(shù).例如,需要一個精確小數(shù),精度為7,位數(shù)為4,則應(yīng)該描述為DECIMAL〔3,4或NUMERIC〔3,4.不過,在不同的關(guān)系數(shù)據(jù)庫系統(tǒng)中,精確小數(shù)的精度和位數(shù)的定義可能會有所變化.注意:DECIMAL是一個十進(jìn)制數(shù).小數(shù)點的位置由數(shù)字的精度〔p和小數(shù)位〔s確定.精度是數(shù)字的總位數(shù),必須小于32.小數(shù)位是小數(shù)部分?jǐn)?shù)字的位數(shù)且總是小于或等于精度值.如果未指定精度和小數(shù)位,則十進(jìn)制值的默認(rèn)精度為5,默認(rèn)小數(shù)位為0.注意:DECIMAL是一個十進(jìn)制數(shù).小數(shù)點的位置由數(shù)字的精度〔p和小數(shù)位〔s確定.精度是數(shù)字的總位數(shù),必須小于32.小數(shù)位是小數(shù)部分?jǐn)?shù)字的位數(shù)且總是小于或等于精度值.如果未指定精度和小數(shù)位,則十進(jìn)制值的默認(rèn)精度為5,默認(rèn)小數(shù)位為0.有些系統(tǒng)中提供了特定的貨幣數(shù)據(jù)類型〔小數(shù)點后面恰好包含兩位數(shù)字的精確小數(shù),例如,在SQLServer中,貨幣數(shù)據(jù)的數(shù)據(jù)類型是Money和Smallmoney;Money數(shù)據(jù)類型要求8個存儲字節(jié),Smallmoney數(shù)據(jù)類型要求4個存儲字節(jié).而對于沒有提供貨幣數(shù)據(jù)類型的系統(tǒng),可以用定義小數(shù)點后數(shù)字個數(shù)為2個的精確小數(shù)類型來替代.當(dāng)然,也可以將數(shù)字?jǐn)?shù)據(jù)存儲在字符串中.例如,對于郵政編碼、電話號碼這樣的數(shù)據(jù),它們雖然由數(shù)字組成,但也可以將其存在字符串中,因為許多系統(tǒng)中會自動刪除數(shù)據(jù)開頭的0,在這樣的系統(tǒng)中,以0開頭的郵政編碼和電話號碼就不能正確存儲.同時,所有的關(guān)系數(shù)據(jù)庫系統(tǒng)都為數(shù)字?jǐn)?shù)據(jù)類型提供了很多內(nèi)嵌函數(shù),可以很方便地使用這些內(nèi)嵌函數(shù)進(jìn)行特定的計算,如POWER〔函數(shù)可以進(jìn)行求冪運(yùn)算,這大大方便了用戶的使用.3.3.2字符串?dāng)?shù)據(jù)類型字符串?dāng)?shù)據(jù)類型是指不能成為算術(shù)操作的直接目標(biāo)的單字節(jié)或多字節(jié)數(shù)據(jù)字符串.字符串?dāng)?shù)據(jù)類型用于存儲字母、數(shù)字和特殊字符.在使用時,必須為字符串加上單引號.一般來說,字符串?dāng)?shù)據(jù)類型有兩種基本形式:·定長字符串〔CHAR:CHAR的長度屬性在1~254之間,并包括1和254.對于CHAR,不論實際存放的數(shù)據(jù)是多長,在內(nèi)存中總是占據(jù)相同的空間,系統(tǒng)會自動插入固定的字符來填滿剩余的空間.一般來說,在定義定長字符串時,必須根據(jù)實際情況指定字符串的長度,以保證字符串的長度足夠使用,又不至于造成存儲空間的浪費(fèi);·變長字符串〔VARCHAR:在實際應(yīng)用中,很多情況下無法明確確定所需字符串的長度,此時,可以應(yīng)用變長字符串.在變長字符串中,存放的字符長度允許不同,只要不超過系統(tǒng)支持的最大限制,例如,可以將長度為9的字符串插入VARCHAR〔15中,而該字符串的長度將仍然為9.注意:字符串的最大長度在不同系統(tǒng)中可能會有很大變化.例如,Oracle中提供給定長字符串CHAR類型多達(dá)2000個字節(jié)長度,而變長字符串則為4000個字節(jié)長度.注意:字符串的最大長度在不同系統(tǒng)中可能會有很大變化.例如,Oracle中提供給定長字符串CHAR類型多達(dá)2000個字節(jié)長度,而變長字符串則為4000個字節(jié)長度.另外,還有許多特殊的字符串類型,如圖形字符串類型、二進(jìn)制字符串類型等.同時,一些系統(tǒng)為大型文本提供特殊字符數(shù)據(jù),通常稱為LOAD或TEXT.關(guān)系數(shù)據(jù)庫系統(tǒng)也為字符串類型數(shù)據(jù)提供了很多內(nèi)嵌函數(shù),以方便用戶進(jìn)行字符串的轉(zhuǎn)換、字符串的截取等等,如LOWER〔Str函數(shù)用于將字符串"Str"中的大寫字母轉(zhuǎn)換成小寫字母,而UPPER〔Str函數(shù)則可以將字符串"Str"中的小寫字母轉(zhuǎn)換成大寫字母.3.3.3日期時間數(shù)據(jù)類型日期時間數(shù)據(jù)類型是日期、時間以及時間戳記的表示,用于存儲日期、時間、時間與日期的組合.日期時間值也可以用于某些算術(shù)運(yùn)算和字符串運(yùn)算,并且與某些字符串是相容的.與其他數(shù)據(jù)類型一樣,日期和時間的值也存儲在列表中.在SQL標(biāo)準(zhǔn)中有三種用來存儲日期和時間的數(shù)據(jù)類型:〔1DATE用于存儲日期數(shù)據(jù),可分為3個部分〔年、月、日.其格式為:YYYY〔year-MM〔Month-DD〔day有效范圍為:0001-01-01到9999-12-31.例如,2008-2-10.〔2TIME用于存儲時間數(shù)據(jù),是用24小時制式來指定一天內(nèi)的時間值,分為3個部分〔小時、分鐘、秒.其格式為:HH:MI:SS.nn…有效范圍為:00:00:00…到23:59:59.999….例如,20:15:10.〔3TIMESTAMP用于存儲日期和時間數(shù)據(jù),分為7個部分〔年、月、日、小時、分鐘、秒及微秒.其格式為:YYYY-MM-DDHH:MI:SS.nn…有效范圍為:0001-01-0100:00:00…到9999-12-3123:59:59.999….例如,2008-2-1020:15:10注意:不同數(shù)據(jù)庫系統(tǒng)處理日期時間數(shù)據(jù)的方式有很多種,日期的存儲和顯示方法都可以變化.這與很多國家的習(xí)慣有關(guān),如美國習(xí)慣用month/day/year的格式來表示日期,用hour:minuteam/pm的格式來表示時間,例如注意:不同數(shù)據(jù)庫系統(tǒng)處理日期時間數(shù)據(jù)的方式有很多種,日期的存儲和顯示方法都可以變化.這與很多國家的習(xí)慣有關(guān),如美國習(xí)慣用month/day/year的格式來表示日期,用hour:minuteam/pm的格式來表示時間,例如10/2/2008,5:27pm.SQL標(biāo)準(zhǔn)中還提供了INTERVAL來存儲時間間隔.如果是一個年—月間隔,則組合了日期字段YEAR、MONTH等,例如,’06-05’表示6年零5個月的時間間隔;如果是一個日—3.4SOL表達(dá)式表達(dá)式是符號與運(yùn)算符的組合,簡單的表達(dá)式可以是一個常量、變量、列或標(biāo)量函數(shù),也可以用運(yùn)算符將兩個或更多的簡單表達(dá)式聯(lián)接起來組成復(fù)雜的表達(dá)式.表達(dá)式的應(yīng)用,使SQL的查詢操作有了更大的靈活性.一個表達(dá)式返回的值,不僅可以用來計算查詢返回的數(shù)據(jù),還可以用于限制篩選查詢返回的行.數(shù)據(jù)庫中基本的數(shù)據(jù)類型,如數(shù)字?jǐn)?shù)據(jù)類型、字符串?dāng)?shù)據(jù)類型、時間和日期數(shù)據(jù)類型等,都可以在表達(dá)式中使用.SQL標(biāo)準(zhǔn)中規(guī)定了4種能用于表達(dá)式中的運(yùn)算符:加號〔+、減號〔-、乘號〔*和除號〔/.在SQL中,這四種運(yùn)算符的優(yōu)先級與數(shù)學(xué)中的優(yōu)先級相同,乘除的優(yōu)先級高于加減的優(yōu)先級,乘除具有相同的優(yōu)先級,加減之間也具有相同的優(yōu)先級.它們都可以在同一表達(dá)式中使用,具有相同優(yōu)先級的符號按照從左到右的順序來計算.例如,列出數(shù)據(jù)庫Danwei中所有項目的項目編號、員工ID號及項目的利潤,可以使用下面的SQL語句:SELECTnumber,id,shou-zhiSELECTnumber,id,shou-zhiFROMDanwei在SQL中也可以使用括號使運(yùn)算式的表達(dá)更加清晰,這樣就可以編寫復(fù)雜的條件語句以便更好地查詢數(shù)據(jù),增加了語句的可讀性,并使SQL語句更易于維護(hù).例如,查詢數(shù)據(jù)庫Danwei中所有利潤大于3000元的項目編號及員工ID號,可以使用下面的SQL語句:SELECTnumber,idSELECTnumber,idFROMDanweiWHERE〔shou-zhi>3000同編程語言一樣,SQL表達(dá)式中進(jìn)行運(yùn)算的兩個值,其數(shù)據(jù)類型必須相同.不能將不同類型的數(shù)據(jù)隨意進(jìn)行操作.SQL標(biāo)準(zhǔn)中也支持?jǐn)?shù)據(jù)類型的自動轉(zhuǎn)化,可以將數(shù)據(jù)從整型自動轉(zhuǎn)化到浮點型.這樣就可以在數(shù)字表達(dá)式中同時使用這些數(shù)據(jù)類型,而不會造成錯誤.另外,在表達(dá)式中還可以使用比較運(yùn)算符〔=,<>,<,>,>=,<=、邏輯運(yùn)算符〔AND,OR,NOT,ANY,ALL等很多其他的運(yùn)算符.如果兩個表達(dá)式是用比較或者邏輯運(yùn)算符組合的,則結(jié)果的數(shù)據(jù)類型是布爾型,其值有三種:TRUE、FALSE或UNKNOWN.如果兩個表達(dá)式是用算術(shù)運(yùn)算符、位運(yùn)算符或者字符串運(yùn)算符組合的,則結(jié)果的數(shù)據(jù)類型由運(yùn)算符確定.復(fù)雜的表達(dá)式由很多符號與運(yùn)算符構(gòu)成,得出一個單值結(jié)果,通過對子表達(dá)式進(jìn)行組合來確定結(jié)果表達(dá)式的數(shù)據(jù)類型、排序規(guī)則、精度和值,進(jìn)行計算時,每次組合兩個表達(dá)式,直到得到最后結(jié)果.表達(dá)式中元素組合的順序由表達(dá)式中運(yùn)算符的優(yōu)先級決定.3.5SQL控制語句每條SQL語句均由一個關(guān)鍵字開頭,這個關(guān)鍵字描述了這條語句將要執(zhí)行的動作,如SELECT、CREATE、INSERT、UPDATE等.每個關(guān)鍵字后都跟了一個子句,子句可以指定語句作用的數(shù)據(jù),也可以提供語句作用的更詳細(xì)的情況.子句可以包含表名、字段名,還可以包含表達(dá)式、常量及其他的一些關(guān)鍵字〔如AND、NOT、OR等.3.5.1語句的分類語句是SQL的主體,SQL中的操作都是由SQL語句實現(xiàn)的.SQL語句主要分為4類:數(shù)據(jù)定義類、數(shù)據(jù)操作類、訪問控制類、事務(wù)控制類.〔1數(shù)據(jù)定義類.SQL中包含了定義數(shù)據(jù)的語句,主要包括以下幾種:·CREATEDATABASE創(chuàng)建數(shù)據(jù)庫·CREATETABLE創(chuàng)建表·DROPTABLE刪除表·ALTERTABLE修改表的結(jié)構(gòu)·CREATEVIEW創(chuàng)建視圖·DROPVIEW刪除視圖·CREATEINDEX創(chuàng)建索引·DROPINDEX刪除索引〔2數(shù)據(jù)操作類.SQL中包含了操作數(shù)據(jù)的語句,主要包括以下幾種:·INSERT添加記錄·UPDATE修改記錄·DELETE刪除記錄·SELECT檢索數(shù)據(jù)〔3訪問控制類.SQL中包含了控制訪問的語句,主要包括以下兩種:·GRANT授予權(quán)限·REVOKE撤消權(quán)限〔4事務(wù)控制類.SQL中包含了控制事務(wù)的語句,主要包括以下兩種:·COMMIT提交事務(wù)·ROLLBACK取消事務(wù)上面列出了SQL中使用的基本SQL語句,還有許多SQL語句并沒有列出,如果讀者有興趣可以參考相關(guān)的SQL資料.3.5.2語句的規(guī)則雖然SQL中并沒有規(guī)定SQL語句應(yīng)該怎樣書寫,但是,在SQL語句中最好按照統(tǒng)一的格式書寫,以使SQL語句清晰易懂.SQL是一門格式自由的語言,既不要求在一行放置的單詞數(shù),也不要求斷行的地方.但是,一般來說,SQL中每一個子句都從一個新的行開始,過長或復(fù)雜的子句放在附加的行,這樣SQL語句就顯得比較清晰明了.例如:SELECT*FROM表名WHERE條件SELECT*FROM表名WHERE條件或者SELECT*FROM表名WHERE條件SQL語句不區(qū)分大小寫.一般來說,SQL語句中的關(guān)鍵字如SELECT、FROM等使用大寫字母,表名的第一個字母采用大寫,而表名的其他字母都采用小寫字母,表中列的名稱都采用小寫字母.在這種約定下,編寫的SQL代碼就比較容易閱讀.例如:SELECTnameSELECTnameFROMDanweiWHEREid=10注意:一些數(shù)據(jù)庫允許指定數(shù)據(jù)庫中使用的名稱是否區(qū)分大小寫.SQL中關(guān)鍵字的大小寫并不會影響SQL語句執(zhí)行結(jié)果.但是,SQL語句中數(shù)據(jù)的大小寫對數(shù)據(jù)庫則是敏感的.例如,數(shù)據(jù)庫存儲字符串?dāng)?shù)據(jù)時,如果將字符串以大寫字母的方式存儲,而訪問時若以小寫字母進(jìn)行比較,則無法找到匹配的字符串,這時應(yīng)該進(jìn)行大小寫的轉(zhuǎn)換.注意:一些數(shù)據(jù)庫允許指定數(shù)據(jù)庫中使用的名稱是否區(qū)分大小寫.SQL中關(guān)鍵字的大小寫并不會影響SQL語句執(zhí)行結(jié)果.但是,SQL語句中數(shù)據(jù)的大小寫對數(shù)據(jù)庫則是敏感的.例如,數(shù)據(jù)庫存儲字符串?dāng)?shù)據(jù)時,如果將字符串以大寫字母的方式存儲,而訪問時若以小寫字母進(jìn)行比較,則無法找到匹配的字符串,這時應(yīng)該進(jìn)行大小寫的轉(zhuǎn)換.數(shù)據(jù)庫中的數(shù)據(jù)對大小寫是敏感的,假設(shè)存儲數(shù)據(jù)時名字都是小寫,則在查找名字為大寫的數(shù)據(jù)時,查詢將找不到任何記錄.因此,數(shù)據(jù)的大小寫會影響SQL語句的執(zhí)行結(jié)果.花括號"{}"表示至少選擇一個選項.若選項之間用逗號分隔,則可以選擇一個選項也可以選擇多個選項.例如,{apple,banana,pear}表示必須從中選擇一個或多個選項,而如果選項用豎線〔|分隔,就只能選擇一個選項.例如,{applelbanana|pear}表示必須從中選擇一個,而不能選擇多個.方括號"[]"表示是一個可選項.若選項用豎線分隔,則可以選擇一個,也可以不選擇.例如,[applelbanana|pear]表示可以從中選擇一個或不選擇.而如果選項用逗號分隔,則可以不選擇,也可以選擇一個或多個.例如,[apple,banana,pear]表示可以從中選擇一個、多個或不選擇.3.6丟失數(shù)據(jù)在實際的數(shù)據(jù)庫中,數(shù)據(jù)常常會不可避免地出現(xiàn)丟失、不可知或不可用的情況.例如,在一個數(shù)據(jù)庫中,一項工程可能還沒有確定具體的完工日期,這種信息的缺失使得表中缺少了內(nèi)容.在數(shù)據(jù)庫中,缺失一些內(nèi)容問題倒不大,真正的問題是這些缺失的內(nèi)容可能會給數(shù)據(jù)庫帶來危險,導(dǎo)致數(shù)據(jù)庫的完整性出現(xiàn)問題.例如,在一個表中工作人員的地址、生日等列的信息缺少是可以允許的,這些信息的缺失并不會給數(shù)據(jù)庫帶來危險.而由于公司中每個工作人員都只有惟一的ID號,職員ID號的缺失將導(dǎo)致無法區(qū)分工作人員記錄,使數(shù)據(jù)庫的完整性出現(xiàn)問題.因此,數(shù)據(jù)庫中提供了NuLL來處理數(shù)據(jù)缺失的問題.通過規(guī)定表中的列是否允許空值,明確表明該列是否支持丟失、不可知或不可用的數(shù)據(jù).SQL標(biāo)準(zhǔn)中規(guī)定了在不同的SQL語句和子句中一組處理NULL值的特殊規(guī)則.下面看兩個例子,如果用戶需要顯示EMP數(shù)據(jù)表中所有工資未知的職員的全部信息,可以使用如下SELECT語句:SELECT*SELECT*FROMEMPWHERESALARYISNULL如果用戶需要EMP數(shù)據(jù)表中所有已知工資數(shù)據(jù)的職員的信息,可以使用以下語句:SELECT*SELECT*FROMEMPWHERESALARYISNOTNULLNULL與0不相同.任何包含NULL的數(shù)據(jù)元素的算術(shù)運(yùn)算將得到NULL值.例如,如果a的當(dāng)前值為NULL,那么下面的表達(dá)式將等于NULL:〔a+10*10注意:NULL既不是字符,也不是數(shù)字,而是默認(rèn)數(shù)據(jù).字符和數(shù)字?jǐn)?shù)據(jù)都可以被設(shè)置為NULL.注意:NULL既不是字符,也不是數(shù)字,而是默認(rèn)數(shù)據(jù).字符和數(shù)字?jǐn)?shù)據(jù)都可以被設(shè)置為NULL.NULL表示未知的值.對于SQL來說意味著這個值是未知的,而只要這個值為未知,就不能將其與其他值比較,即使其他值也是NULL.所以SQL允許除了在TRUE和FALSE之外還有第三種類型的值,稱之為"非確定"〔unknown值.如果比較的兩邊都是NULL,就被認(rèn)為是非確定的.將一個非確定值取反或使用AND或OR與其他進(jìn)行合并之后,其結(jié)果仍是非確定的.由于結(jié)果表中只包括值為"真"的行,所以NULL不可能滿足該檢查,需要使用特殊的運(yùn)算符ISNULL和ISNOTNULL.雖然NULL并不能很好地解決信息缺失的問題,但是,不管如何,NULL值是SQL標(biāo)準(zhǔn)的一部分,在實際數(shù)據(jù)庫系統(tǒng)中,也都提供了對NULL值的支持.在數(shù)據(jù)庫開發(fā)中,NULL值有著重要的作用.習(xí)題1.選擇題〔1SQL語句可以被劃分為〔部分.A.SQL操作B.目標(biāo)C.條件D.結(jié)果〔2SQL操作語句中的基本操作有〔.A.SELECTB.INSERTC.UPDATED.DELETE〔3SQL中支持〔常量.A.?dāng)?shù)字B.字符串C.時間和日期D.符號〔4字符串?dāng)?shù)據(jù)類型有〔基本形式.A.圖形字符串類型B.定長字符串類型C.二進(jìn)制字符串類型D.變長字符串類型〔5SQL標(biāo)準(zhǔn)中規(guī)定的能用于表達(dá)式的運(yùn)算符有〔.A.加號〔+B.減號〔-C.乘號〔*D.除號〔/2.填空題〔1SQL是結(jié)構(gòu)化查詢語言〔StructuredQueryLanguage的縮寫,是IBM公司在20世紀(jì)70年代開發(fā)的________________________________________的一部分.〔2常量也稱為字面值或標(biāo)量值,是表示一個___________________的符號.〔3表達(dá)式是_________________與____________________________的組合.〔4SQL語言核心功能使用的9個動詞為_____________、_____________、_____________、_____________、_____________、_____________、_____________、_____________、_____________.第4章SQL函數(shù)與其他編程語言一樣,SQL提供了許多內(nèi)置的函數(shù),例如計算多行數(shù)據(jù)的聚合函數(shù)、求字符串子串的字符串函數(shù)、處理日期和時間的日期時間函數(shù)、求數(shù)字的數(shù)字函數(shù)、轉(zhuǎn)換數(shù)據(jù)類型的轉(zhuǎn)換函數(shù)等等.通過使用這些函數(shù),用戶可以對數(shù)據(jù)表中的數(shù)據(jù)按照自己的需要進(jìn)行各種復(fù)雜的運(yùn)算和操作.這些內(nèi)置函數(shù)可以大大提高在SQL語句中操縱信息的能力,使得對SQL語句的使用有了更大的靈活性.本章將對這些SQL函數(shù)進(jìn)行簡單介紹.本章目標(biāo):完成本章內(nèi)容后我們將能夠:掌握聚合函數(shù)掌握字符串函數(shù)了解日期時間函數(shù)了解數(shù)學(xué)函數(shù)了解轉(zhuǎn)換函數(shù)4.1聚合函數(shù)在實際應(yīng)用中,有時候需要知道所有記錄中某項值的總和、平均值等等,這時可以使用SQL.提供的聚合函數(shù).聚合函數(shù)是SQL中很重要的一部分.聚合函數(shù)不是對某個記錄進(jìn)行操作,而是對表中或查詢到的所有記錄的某個項進(jìn)行操作.在實際應(yīng)用中,聚合函數(shù)還可以被稱為匯合函數(shù)、聚集函數(shù)、匯總函數(shù)等等.聚合函數(shù)是設(shè)計為允許大家匯總表或視圖的多行數(shù)據(jù)的SQL函數(shù),以便用戶進(jìn)行特定的查詢,如COUNT〔函數(shù)可以統(tǒng)計滿足WHERE子句中的條件的記錄總數(shù).所有聚合函數(shù)都具有確定性,任何時候用一組給定的輸入值調(diào)用它們時,都返回相同的值.SQL中支持的聚合函數(shù)有以下5種:··COUNT〔統(tǒng)計列中值的數(shù)量.·SUM〔計算總和.·AVG〔計算平均值.·MAX〔計算最大值.·MIN〔計算最小值.在使用聚合函數(shù)時,需要注意:··在函數(shù)COUNT〔、SUM〔、AVG〔中可以使用DISTINCT關(guān)鍵字,以便在計算中不包含重復(fù)的行.而對于函數(shù)MAX〔、MIN〔與COUNT〔*,由于不會改變其結(jié)果,因此沒有必要使用DISTINCT.·函數(shù)SUM〔、AVG〔只能對數(shù)字?jǐn)?shù)據(jù)類型的列使用,而函數(shù)COUNT〔、MAX〔、MIN〔與COUNT〔*可以對所有數(shù)據(jù)類型使用.但在不同的數(shù)據(jù)庫系統(tǒng)中,又提供一些其他的聚合函數(shù),如Oracle中提供了STDDEV〔、VARIANCE〔函數(shù),SQLServer中提供了STDEV〔、VAR〔函數(shù)等.COUNT〔函數(shù)COUNT〔函數(shù)可以用來計算查詢結(jié)果中某個特定列出現(xiàn)的次數(shù).SQL提供了COUNT〔和COUNT〔*函數(shù).這兩個函數(shù)很相似,但使用是完全不同的.COUNT〔*函數(shù)計算所有的記錄,不用考慮空值.當(dāng)然,如果COUNT〔函數(shù)在沒有空值的列上進(jìn)行計算,得到的值與COUNT〔*函數(shù)相同.DISTINCT關(guān)鍵字與COUNT〔一起使用,就可以不計算重復(fù)的值,而返回特定列中惟—值的數(shù)目.而DISTINCT不與函數(shù)COUNT〔*一起使用,因為COUNT〔*計算的是表中含有的記錄的數(shù)目,并不對特定列進(jìn)行計算.SUM〔與AVG〔函數(shù)SUM〔函數(shù)用來計算特定列所有值的總和并返回計算結(jié)果.AVG〔函數(shù)用來計算特定列所有值的平均值.因此,SUM〔與AVG〔函數(shù)只能處理數(shù)字?jǐn)?shù)據(jù)類型的列.而且,AVG〔函數(shù)計算值的數(shù)目時,并不會將空值計算在內(nèi).DISTINCT關(guān)鍵字也可以在SUM〔與AVG〔函數(shù)中使用.在SUM〔函數(shù)中使用DISTINCT時,SUM〔函數(shù)將只計算列中惟一值的總和.在AVG〔函數(shù)中使用DISTINCT時,AVG〔函數(shù)將只計算列中惟一值的平均值.例如,下面的語句在AVG〔函數(shù)中使用DISTINCT:SELECTAVG〔DISTINCTpriceSELECTAVG〔DISTINCTpriceFROMDanweiWHEREtype-’business’MAX〔與MIN〔函數(shù)MAX〔函數(shù)用來計算特定列包含的所有值中最大的值,而MIN〔函數(shù)用來計算特定列包含的所有值中最小的值.例如,可以使用這些函數(shù)返回最低和最高的貨運(yùn)成本.因此,MAX〔與MIN〔函數(shù)中沒有必要使用DISTINCT關(guān)鍵字.另外,當(dāng)列中存在非空值時,MAX〔與MIN〔函數(shù)并不會返回空值.因為,空值是未知的,不能認(rèn)為大于或小于任何值.在后面的章節(jié)里將繼續(xù)介紹聚合函數(shù)的使用.4.2字符串函數(shù)字符串是數(shù)據(jù)庫中使用較多的數(shù)據(jù)類型,很多數(shù)據(jù)的存儲都要使用到字符串.對字符串進(jìn)行操作是數(shù)據(jù)庫中很重要的一種操作,SQL中也為字符串提供了很多函數(shù),如SUBSTR〔函數(shù)用于從字符串中取出一個子串.SQL中常見的字符串函數(shù)有:··CHR〔code返回字符代碼數(shù)值等于code的字符.如果數(shù)據(jù)庫采用ASCII字符集,則code代表字符的ASCII代碼,CHR〔code返回該ASCII代碼所代表的字符.例如,ASCII代碼65、49分別代表字符"A"、"l".·CONCAT〔strl,str2返回的字符串是strl和str2連接的結(jié)果.·INITCAP〔str返回將str的首字符大寫,其余字符小寫的字符串.·LOWER〔str返回將str的所有字母都變成小寫后的字符串.·UPPER〔str返回將str的所有字母都變成大寫后的字符串.例如,下面的語句分別將name列的所有字母變成小寫、大寫和首字母大寫其余字符小寫,然后將結(jié)果返回.SELECTname,LOWER〔name,UPPER〔name,INITCAP〔UPPER〔nameSELECTname,LOWER〔name,UPPER〔name,INITCAP〔UPPER〔nameFROMDanwei·REPLACE〔str1,str2,str3返回在strl中使用str3對str2進(jìn)行替換后的字符串,strl是被查找的字符串,str2是查找的字符串,str3是替換字符串.如果第三個參數(shù)默認(rèn),或者是NULL,則在被查找的字符串中刪去查找的字符串.·SUBSTR〔strl,n,m返回按參數(shù)要求得到的一個strl的子串,str1是主串,n是所求子串的第一個字符在strl中的位置,m是子串的字符數(shù).n為負(fù)數(shù)時表示子串在strl中的開始位置由后向前確定.例如,下面的語句返回FIRSTNAME列中字符串從第2位開始長度為3的字符.SELECTFIRSTNAME,SUBSTR〔FIRSTNAME,2,3SELECTFIRSTNAME,SUBSTR〔FIRSTNAME,2,3FROMDanwei·INSTR〔str1,str2,n,m返回指定子串在主串中的位置.str1是主串,str2是要查找的子串,n是在主串中開始查找時的位置,m表示要返回的子串是第幾個.n,m的默認(rèn)值是1,如果n是負(fù)數(shù),表示查找時從strl的末尾計數(shù).例如,下面的語句將從字符串的第2個字符開始搜索并返回第一個以O(shè)開頭的字符的位置.SELECTFIRSTNAME,INSTR〔FIRSTNAME,SELECTFIRSTNAME,INSTR〔FIRSTNAME,‘O’,2,1FROMDanwei·LENGTH〔str1返回字符串strl的長度.例如,下面的語句返回指定的FIRSTNAME列中字符串的長度.SELECTFIRSTNAME,LENGTH〔FIRSTNAMESELECTFIRSTNAME,LENGTH〔FIRSTNAMEFROMDanwei各種SQL工具都支持多種字符串函數(shù),以方便對數(shù)據(jù)庫中存儲的大量字符串?dāng)?shù)據(jù)進(jìn)行處理.這些函數(shù)在不同的數(shù)據(jù)庫可能有著不同的函數(shù)名稱,例如,在Oracle數(shù)據(jù)庫系統(tǒng)中,返回字符串長度的函數(shù)是LENGTH〔,在SQLServer數(shù)據(jù)庫系統(tǒng)中,返回字符串長度的函一是CHAR_LENGTH〔.所以,在使用這些字符串函數(shù)前要先查閱當(dāng)前使用的數(shù)據(jù)庫系統(tǒng)的文檔資料.4.3日期時間函數(shù)時間和日期在現(xiàn)在的數(shù)據(jù)庫中使用很頻繁.SQL中也定義了很多時間日期函數(shù),可以方便地進(jìn)行時間和日期的顯示、比較、修改和格式轉(zhuǎn)換,如SYSDATE〔函數(shù)用于返回系統(tǒng)時間和日期.這些日期時間函數(shù)在不同的數(shù)據(jù)庫可能有著不同的函數(shù)名稱,如Oracle系統(tǒng)中返回系統(tǒng)的時間和日期的函數(shù)是SYSDATE〔函數(shù),但在SQLServer中返回系統(tǒng)的時間和日期的函數(shù)是GETDATE〔.所以,在使用這些函數(shù)前一定要先查閱當(dāng)前使用的數(shù)據(jù)庫系統(tǒng)的文檔資料.SQL中常見的日期時間函數(shù)有:·ADD_MONTHS〔date,n返回將指定日期date所在的月份增加n后的日期.例如,下面的語句把顯示的所有員工的生日延遲兩個月.SELECTid,birthday,ADD_MONTHS〔birthday,2SELECTid,birthday,ADD_MONTHS〔birthday,2FROMDanwei·LAST_DAY〔date返回指定日期date所在月份的最后一天的日期.例如,下面的語句返回ENDDATE列中給出的日期所在月份的最后一天是幾號.SELECTENDDATE,LAST_DAY〔ENDDATESELECTENDDATE,LAST_DAY〔ENDDATEFROMDanwei·MONTHS_BETWEEN〔datel,date2返回指定的日期datel和date2之間的月數(shù).例如,下面的語句返回給定的日期startdate、enddate有幾個月.SELECTstartdate,enddate,MONTHS_BETWEEN〔startdate,enddateSELECTstartdate,enddate,MONTHS_BETWEEN〔startdate,enddateFROMDanwei·NEW_TIME〔date,zonel,zone2返回依據(jù)指定時區(qū)調(diào)整后的日期時間.例如,下面的語句將時區(qū)E的日期時間調(diào)整到時區(qū)P日期時間,然后返回結(jié)果.SELECTENDDATEE,NEW_TIME〔ENDDATE,SELECTENDDATEE,NEW_TIME〔ENDDATE,’E’,’P’F

溫馨提示

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

評論

0/150

提交評論