本章對(duì)數(shù)據(jù)庫技術(shù)的發(fā)展概況作了簡要的說明_第1頁
本章對(duì)數(shù)據(jù)庫技術(shù)的發(fā)展概況作了簡要的說明_第2頁
本章對(duì)數(shù)據(jù)庫技術(shù)的發(fā)展概況作了簡要的說明_第3頁
本章對(duì)數(shù)據(jù)庫技術(shù)的發(fā)展概況作了簡要的說明_第4頁
本章對(duì)數(shù)據(jù)庫技術(shù)的發(fā)展概況作了簡要的說明_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、PAGE 24程序員突擊MySQL原理與Web系統(tǒng)開發(fā).PAGE 25第1章 MySQL導(dǎo)論:.;第1章 MySQL導(dǎo)論本章對(duì)數(shù)據(jù)庫技術(shù)的開展概略作了簡要的闡明,同時(shí)引見一些常用的小型數(shù)據(jù)庫和大型數(shù)據(jù)庫,重點(diǎn)引見MySQL數(shù)據(jù)庫。經(jīng)過本章的閱讀,讀者將對(duì)MySQL的開展情況、特點(diǎn)及其運(yùn)用領(lǐng)域有一定的了解。1.3節(jié)論述MySQL的插件式體系構(gòu)造,簡單闡明各種存儲(chǔ)引擎的特點(diǎn)及選擇方法和技巧。1.4節(jié)重點(diǎn)引見MySQL最常用的兩種存儲(chǔ)引擎,即MyISAM和InnoDB。1.1 數(shù)據(jù)庫概述在學(xué)習(xí)MySQL之前,首先簡單引見一下數(shù)據(jù)庫的根本概念。舉個(gè)簡單的例子來闡明:每個(gè)人都有很多親戚和朋友,為了堅(jiān)持與

2、他們聯(lián)絡(luò),我們經(jīng)常用一個(gè)筆記本將他們的姓名、地址、等信息都記錄下來,這樣要查誰的或地址就很方便。這個(gè)“通訊錄就是一個(gè)最簡單的“數(shù)據(jù)庫,每個(gè)人的姓名、地址、郵箱等信息就是這個(gè)數(shù)據(jù)庫中的“數(shù)據(jù)。我們可以在筆記本這個(gè)“數(shù)據(jù)庫中添加新朋友的個(gè)人信息,也可以由于某個(gè)朋友的變動(dòng)而修正他的號(hào)碼這個(gè)“數(shù)據(jù)??偠灾?,我們運(yùn)用筆記本這個(gè)“數(shù)據(jù)庫是為了能隨時(shí)查到某位親戚或朋友的地址、或號(hào)碼這些“數(shù)據(jù)。當(dāng)我們的親戚朋友不多時(shí),也答應(yīng)以很快地從筆記本中找到所需的數(shù)據(jù),但是當(dāng)筆記本中的數(shù)據(jù)很多時(shí),也許就要破費(fèi)不少時(shí)間去查找某個(gè)朋友的聯(lián)絡(luò)方式了。而將這個(gè)筆記本數(shù)字化,也就是說將它的內(nèi)容錄入到計(jì)算機(jī)中,例如,存放在MySQ

3、L中,那么,即使我們有數(shù)以萬計(jì)的聯(lián)絡(luò)人,我們也可以在一瞬間找到他們。這就是數(shù)據(jù)庫的由來和作用。隨著信息產(chǎn)業(yè)的開展,數(shù)據(jù)庫在社會(huì)中發(fā)揚(yáng)了越來越重要的作用。可以說,幾乎一切的信息系統(tǒng)都依賴于數(shù)據(jù)庫。通俗地講,數(shù)據(jù)庫就是存放數(shù)據(jù)的倉庫,而這個(gè)倉庫是存放在計(jì)算機(jī)存儲(chǔ)設(shè)備上,而且數(shù)據(jù)是按照一定格式存放的。按照數(shù)據(jù)庫實(shí)際的定義,數(shù)據(jù)庫是長期存儲(chǔ)在計(jì)算機(jī)內(nèi)的、有組織的、可共享的數(shù)據(jù)集合。在今天,電子商務(wù)、電子政務(wù)等都得到了迅速的開展,并由此產(chǎn)生了大量的數(shù)據(jù)。為了可以高效、準(zhǔn)確地處置分析這些數(shù)據(jù),人們便運(yùn)用了數(shù)據(jù)庫。為了將數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中,通常將描畫事物特征的假設(shè)干個(gè)數(shù)據(jù)組成一個(gè)數(shù)據(jù)記錄Record。例如,

4、通訊錄中的聯(lián)絡(luò)人,可以寫成如下方式:聯(lián)絡(luò)人姓名,地址,郵箱并將其稱之為記錄型,也就是數(shù)據(jù)的邏輯構(gòu)造。它是對(duì)聯(lián)絡(luò)人這一事務(wù)的籠統(tǒng)描畫。其中,“聯(lián)絡(luò)人也稱為記錄名,通常在關(guān)系數(shù)據(jù)庫中,也作為根本表的表名。姓名、地址、郵箱等稱為字段field,在關(guān)系數(shù)據(jù)庫中,也就是各個(gè)根本表的表項(xiàng)。對(duì)于每個(gè)字段可以賦予特定的值,例如:張三,倉基社區(qū)sz263這就成為了一條記錄。在關(guān)系數(shù)據(jù)庫中,假設(shè)干條記錄便構(gòu)成一張表。數(shù)據(jù)庫帶來的最直接的益處,就是實(shí)現(xiàn)了數(shù)據(jù)獨(dú)立性。所謂數(shù)據(jù)獨(dú)立性,是指數(shù)據(jù)與用戶運(yùn)用程序之間的獨(dú)立性,也就是實(shí)現(xiàn)了運(yùn)用程序與數(shù)據(jù)的分別。對(duì)于大多數(shù)運(yùn)用程序而言,如一個(gè)電子商務(wù)

5、網(wǎng)站,它必然需求有后臺(tái)數(shù)據(jù)的支持才干運(yùn)作。然而,這些后臺(tái)數(shù)據(jù)是以什么方式存放在物理磁盤上,網(wǎng)站運(yùn)用程序并不用關(guān)懷,甚至當(dāng)數(shù)據(jù)庫的邏輯構(gòu)造發(fā)生變化時(shí),如數(shù)據(jù)庫中原來的記錄型是商品商品編號(hào),商品稱號(hào),價(jià)錢,更改為商品商品編號(hào),商品稱號(hào),價(jià)錢,數(shù)量,原先的網(wǎng)站運(yùn)用程序也不用更改。前者稱之為數(shù)據(jù)的物理獨(dú)立性,后者叫做數(shù)據(jù)的邏輯獨(dú)立性?!咎貏e提示】數(shù)據(jù)獨(dú)立性對(duì)于系統(tǒng)維護(hù)而言相當(dāng)重要,數(shù)據(jù)庫將數(shù)據(jù)以及程序進(jìn)展了分別,當(dāng)數(shù)據(jù)存儲(chǔ)方式,或者邏輯構(gòu)造有改動(dòng)時(shí),運(yùn)用程序可以堅(jiān)持不變。假設(shè)沒有數(shù)據(jù)獨(dú)立性,程序和數(shù)據(jù)將會(huì)高度耦合,對(duì)于系統(tǒng)維護(hù)而言,就是一場“災(zāi)難。1.1.1 數(shù)據(jù)庫技術(shù)的開展在數(shù)據(jù)庫系統(tǒng)產(chǎn)生之前,人們

6、對(duì)計(jì)算機(jī)數(shù)據(jù)的管理閱歷了人工管理階段20世紀(jì)50年代中期以前和文件系統(tǒng)管理階段20世紀(jì)50年代后到60年代中期。在人工管理階段,人們對(duì)數(shù)據(jù)的處置才干很低。從硬件上看,計(jì)算機(jī)內(nèi)存小,計(jì)算速度低;從軟件上看,沒有操作系統(tǒng)的支持,更沒有數(shù)據(jù)庫管理軟件。因此,在這個(gè)階段,數(shù)據(jù)總量不大,數(shù)據(jù)不能長期保管,數(shù)據(jù)與運(yùn)用程序不隔離,運(yùn)用程序需求隨著數(shù)據(jù)存儲(chǔ)方式的變化而變化。在文件系統(tǒng)階段,計(jì)算機(jī)的存儲(chǔ)器增大,計(jì)算速度大大提高,并且配備了操作系統(tǒng)。在這個(gè)階段,數(shù)據(jù)可以長期存放,并采用文件系統(tǒng)管理數(shù)據(jù)。但是,運(yùn)用文件系統(tǒng)管理數(shù)據(jù)存在許多缺陷,數(shù)據(jù)冗余度大,邏輯獨(dú)立性差。1964年,美國通用電器公司的Bachman

7、等人勝利開發(fā)了世界上第一個(gè)DBMSDatabase Management SystemIDS系統(tǒng),標(biāo)志著人們對(duì)數(shù)據(jù)的管理進(jìn)入了數(shù)據(jù)庫系統(tǒng)階段。與文件系統(tǒng)相比,數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)了數(shù)據(jù)的整體構(gòu)造化。在文件系統(tǒng)中,雖然存在記錄內(nèi)的構(gòu)造性,但整體上數(shù)據(jù)是無構(gòu)造的,即不同文件之間的記錄是沒有聯(lián)絡(luò)的。但在數(shù)據(jù)庫系統(tǒng)中,不僅存在記錄內(nèi)部的聯(lián)絡(luò),而且還描畫了數(shù)據(jù)之間的聯(lián)絡(luò),實(shí)現(xiàn)了數(shù)據(jù)的整體構(gòu)造化。這是數(shù)據(jù)庫系統(tǒng)與文件系統(tǒng)的本質(zhì)差別。同時(shí),數(shù)據(jù)庫系統(tǒng)使數(shù)據(jù)面向整個(gè)運(yùn)用系統(tǒng),降低了數(shù)據(jù)的冗余度,實(shí)現(xiàn)了數(shù)據(jù)的共享。表達(dá)數(shù)據(jù)庫整體構(gòu)造性的典型例如就是外鍵約束。如圖1-1所示,在訂單記錄中的收貨人編號(hào)必需存在于描畫收貨人

8、信息的特定的記錄收貨人中;否那么,這便是一個(gè)非法的收貨人編號(hào)。在數(shù)據(jù)庫中,不同記錄或表之間的這種聯(lián)絡(luò),便使數(shù)據(jù)庫數(shù)據(jù)整體構(gòu)造化。圖1-1 外鍵約束數(shù)據(jù)庫系統(tǒng)的開展閱歷了以下幾個(gè)階段。第一代數(shù)據(jù)庫技術(shù)以層次數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)庫為代表。其主要特點(diǎn)是支持三級(jí)方式構(gòu)造;用指針來表示數(shù)據(jù)之間的聯(lián)絡(luò);數(shù)據(jù)定義言語Data Definaition Language,DDL和數(shù)據(jù)支配言語Data Manipulation Language,DML相對(duì)獨(dú)立;數(shù)據(jù)庫采用過程性導(dǎo)航式言語,用戶在操作 HYPERLINK wiki.ccw/%E6%95%B0%E6%8D%AE%E5%BA%93 o 數(shù)據(jù)庫 數(shù)據(jù)庫時(shí)不但

9、闡明要做什么,還要闡明怎樣做。例如,在查找語句中不但要闡明查找的對(duì)象,而且要規(guī)定存取途徑。這和如今被廣泛運(yùn)用的非過程性言語SQL是不同的。第二代數(shù)據(jù)庫技術(shù),也就是如今被廣泛運(yùn)用的關(guān)系數(shù)據(jù)庫系統(tǒng)。MySQL正是屬于這類數(shù)據(jù)庫。關(guān)系數(shù)據(jù)庫有嚴(yán)厲的數(shù)學(xué)實(shí)際作為根底,概念明晰,易于運(yùn)用。1970年,美國IBM公司San Jose研討實(shí)驗(yàn)室研討員E.F.Codd提出了關(guān)系數(shù)據(jù)庫模型,奠定了關(guān)系數(shù)據(jù)庫實(shí)際的根底。E.F.Codd也因此獲得了1981年的計(jì)算機(jī)圖靈獎(jiǎng)。1974年, San Jose實(shí)驗(yàn)室研制勝利System R,這是世界上最早的關(guān)系數(shù)據(jù)庫管理系統(tǒng)RDBMS。1980年后,眾多RDBMS產(chǎn)品相

10、繼推出,包括Oracle、Infomix、Sybase等。1990年后,RDBMS不斷開展,可以支持分布式數(shù)據(jù)庫、開放環(huán)境下異構(gòu)數(shù)據(jù)庫互連,OLTPOn-Line Transaction Processing聯(lián)機(jī)事務(wù)處置和OLAPOn-Line Analytical Processing聯(lián)機(jī)分析處置。第三代數(shù)據(jù)庫技術(shù),以面向?qū)ο髷?shù)據(jù)庫為代表。這一代數(shù)據(jù)庫管理系統(tǒng)基于擴(kuò)展的關(guān)系數(shù)據(jù)庫模型或者面向?qū)ο髷?shù)據(jù)庫模型,目前,該技術(shù)尚未完全成熟。但是它支持包括數(shù)據(jù)、對(duì)象的管理,可以很好地和面向?qū)ο笤O(shè)計(jì)技術(shù)相交融。因此,許多商品化的關(guān)系數(shù)據(jù)庫管理系統(tǒng)也都進(jìn)展了擴(kuò)展,添加了面向?qū)ο筇匦?,開展成ORDBMSOb

11、ject-Relation DBMS。1.1.2 數(shù)據(jù)模型模型是對(duì)現(xiàn)實(shí)事物的一種籠統(tǒng)。它是人們?yōu)榱烁玫匮杏懍F(xiàn)實(shí)事物而建立的一種對(duì)現(xiàn)實(shí)事物的模擬。它客觀地表現(xiàn)了現(xiàn)實(shí)事物的特征。由于計(jì)算機(jī)只能存儲(chǔ)數(shù)據(jù),而不能存儲(chǔ)處置現(xiàn)實(shí)事物。因此,必需先將現(xiàn)實(shí)事物轉(zhuǎn)化為數(shù)據(jù)模型,才干交給計(jì)算機(jī)處置。例如,在網(wǎng)上購物時(shí),計(jì)算機(jī)需求處置用戶訂單。但是計(jì)算機(jī)并無法直接處置一張訂單,因此必需先將訂單轉(zhuǎn)化為計(jì)算機(jī)可以存儲(chǔ)和處置的數(shù)據(jù)。而這些數(shù)據(jù)構(gòu)造,表達(dá)了訂單的數(shù)據(jù)特征,就是一種數(shù)據(jù)模型。數(shù)據(jù)庫中的數(shù)據(jù)模型普通包括數(shù)據(jù)構(gòu)造、數(shù)據(jù)操作和完好性約束3個(gè)要素。例如,訂單訂單號(hào),商品名,單價(jià),件數(shù),收貨人編號(hào)就是訂單的一種數(shù)據(jù)構(gòu)

12、造。由于用戶可以有下訂單、撤銷訂單等操作,這些操作能夠會(huì)引起對(duì)訂單數(shù)據(jù)的插入、修正和刪除。有時(shí)還會(huì)有查詢等操作,這就是數(shù)據(jù)操作。而訂單的單價(jià)、件數(shù)不能夠?yàn)樨?fù)數(shù),這就約束了兩者的取值范圍。這是一種完好性約束,稱之為實(shí)體完好性。假設(shè)此時(shí)有數(shù)據(jù)構(gòu)造:收貨人收貨人編號(hào),姓名,性別,地址,。顯然,在訂單訂單號(hào),商品名,單價(jià),件數(shù),收貨人編號(hào)中的收貨人編號(hào)必需存在收貨人收貨人編號(hào),姓名,性別,地址,之中,否那么訂單中的收貨人編號(hào)就毫無意義。這種完好性約束,稱之為參照完好性。1概念數(shù)據(jù)模型概念數(shù)據(jù)模型Conceptual Data Model是最上層的數(shù)據(jù)模型。它與詳細(xì)的數(shù)據(jù)庫類型無關(guān),是數(shù)據(jù)庫設(shè)計(jì)人員和用

13、戶交流的言語。概念數(shù)據(jù)模型非常接近現(xiàn)實(shí)世界,運(yùn)用于數(shù)據(jù)庫設(shè)計(jì)的初始階段。最常見而且被廣泛運(yùn)用的概念模型是實(shí)體-聯(lián)絡(luò)E-R模型,簡稱E-R模型。2構(gòu)造數(shù)據(jù)模型目前,構(gòu)造數(shù)據(jù)模型中最常用的構(gòu)造數(shù)據(jù)模型有4種。分別是:層次模型、網(wǎng)狀模型、關(guān)系模型和面向?qū)ο竽P汀F渲?,層次模型和網(wǎng)狀模型統(tǒng)稱為非關(guān)系模型。它們的數(shù)據(jù)構(gòu)造可以和圖論中的有向圖相對(duì)應(yīng),比較直觀。層次模型在現(xiàn)實(shí)生活中,許多實(shí)體之間的聯(lián)絡(luò)就是一種自然的層次關(guān)系。例如,一個(gè)文件系統(tǒng)的目錄構(gòu)造,就是一個(gè)很好的例子。層次模型中,每個(gè)結(jié)點(diǎn)只需一個(gè)雙親結(jié)點(diǎn)。整個(gè)模型中,也只需根結(jié)點(diǎn)沒有雙親結(jié)點(diǎn)。每個(gè)結(jié)點(diǎn)都表示一個(gè)實(shí)體型集。實(shí)體之間的聯(lián)絡(luò)用結(jié)點(diǎn)之間的連線表

14、示。這種聯(lián)絡(luò)是雙親結(jié)點(diǎn)與子女結(jié)點(diǎn)之間的一對(duì)多聯(lián)絡(luò)。因此,層次模型表達(dá)一對(duì)一、一對(duì)多的聯(lián)絡(luò)是非常直觀的。但是,對(duì)于表達(dá)多對(duì)多聯(lián)絡(luò)時(shí),層次模型需求經(jīng)過輔助手段才干表現(xiàn),顯得蠢笨、復(fù)雜。網(wǎng)狀模型層次模型可以方便地表示現(xiàn)實(shí)世界中的層次關(guān)系。而實(shí)踐上,現(xiàn)實(shí)世界中存在著大量的非層次關(guān)系。對(duì)于這些關(guān)系,采用層次模型是很不直接的。而網(wǎng)狀模型可以抑制這個(gè) 缺陷。例如,用戶的權(quán)限分配。同一用戶可以擁有多種不同的權(quán)限,而同一權(quán)限可以被系統(tǒng)的多個(gè)不同用戶同時(shí)擁有,這就是多對(duì)多的聯(lián)絡(luò)。圖1-2顯示了用戶與權(quán)限的多對(duì)多關(guān)系。圖1-2 多對(duì)多關(guān)系關(guān)系模型關(guān)系模型是如今最重要的一種數(shù)據(jù)模型。自20世紀(jì)80、90年代以來,軟件

15、廠商新推出的數(shù)據(jù)庫管理系統(tǒng)幾乎都是以關(guān)系模型為根底的。如今,包括MySQL在內(nèi)的多種數(shù)據(jù)庫都是基于關(guān)系模型的。關(guān)系模型的邏輯構(gòu)造是一張二維表,簡稱表,也可稱之為關(guān)系。它由行和列組成。二維表中的一列也可以稱之為屬性。如表1-1所示,訂單表有5列,其屬性分別是訂單號(hào)、商品名、單價(jià)、件數(shù)、收貨人編號(hào)。二維表的表頭,即訂單號(hào),商品名,單價(jià),件數(shù),收貨人編號(hào)對(duì)應(yīng)一個(gè)關(guān)系方式。表1-1所對(duì)應(yīng)的關(guān)系方式可以描畫為:訂單訂單號(hào),商品名,單價(jià),件數(shù),收貨人編號(hào)。在二維表中,除了表頭以外的恣意非空行為一個(gè)元組,即一條記錄。如0001,專家導(dǎo)學(xué)基于MySQL的JavaB/S系統(tǒng)開發(fā),50,1,000325就是一個(gè)元

16、組。表1-1 訂單表訂 單 號(hào)商 品 名單 價(jià)件 數(shù)收貨人編號(hào)0001專家導(dǎo)學(xué)基于MySQL的Java B/S系統(tǒng)開發(fā)5010003250002專家導(dǎo)學(xué)Tomcat運(yùn)用開發(fā)502000333面向?qū)ο竽P兔嫦驅(qū)ο驩bject Oriented,OO是當(dāng)前計(jì)算機(jī)界關(guān)懷的重點(diǎn),它是20世紀(jì)90年代軟件開發(fā)方法的主流。面向?qū)ο蟮母拍詈瓦\(yùn)用已超越了程序設(shè)計(jì)和軟件開發(fā),擴(kuò)展到很寬的范圍。對(duì)象是人們要進(jìn)展研討的任何事物,從最簡單的整數(shù)到復(fù)雜的飛機(jī)等均可看作對(duì)象,它不僅能表示詳細(xì)的事物,還能表示籠統(tǒng)的規(guī)那么、方案或事件。對(duì)象模型表示了靜態(tài)的、構(gòu)造化的系統(tǒng)數(shù)據(jù)性質(zhì),描畫了系統(tǒng)的靜態(tài)構(gòu)造,它是從客觀世界實(shí)體的對(duì)象

17、關(guān)系角度來描畫的,表現(xiàn)了對(duì)象的相互關(guān)系。該模型主要關(guān)懷系統(tǒng)中對(duì)象的構(gòu)造、屬性和操作,它是分析階段3個(gè)模型的中心,是其他兩個(gè)模型的框架。動(dòng)態(tài)模型是與時(shí)間和變化有關(guān)的系統(tǒng)性質(zhì)。該模型描畫了系統(tǒng)的控制構(gòu)造,它表示了瞬間的、行為化的系統(tǒng)控制性質(zhì),它關(guān)懷的是系統(tǒng)的控制、操作的執(zhí)行順序,它表示從對(duì)象的事件和形狀的角度出發(fā),表現(xiàn)了對(duì)象的相互行為。該模型描畫的系統(tǒng)屬性是觸發(fā)事件、事件序列、形狀、事件與形狀的組織。運(yùn)用形狀圖作為描畫工具。它涉及事件、形狀、操作等重要概念。功能模型描畫了系統(tǒng)的一切計(jì)算。功能模型指出發(fā)生了什么,動(dòng)態(tài)模型確定什么時(shí)候發(fā)生,而對(duì)象模型確定發(fā)生的客體。功能模型闡明一個(gè)計(jì)算如何從輸入值得到

18、輸出值,它不思索計(jì)算的次序。功能模型由多張數(shù)據(jù)流圖組成。數(shù)據(jù)流圖用來表示從源對(duì)象到目的對(duì)象的數(shù)據(jù)值的流向,它不包含控制信息,控制信息在動(dòng)態(tài)模型中表示,同時(shí)數(shù)據(jù)流圖也不表示對(duì)象中值的組織,值的組織在對(duì)象模型中表示。3物理數(shù)據(jù)模型物理數(shù)據(jù)模型是描畫數(shù)據(jù)在存儲(chǔ)介質(zhì)商組織構(gòu)造的數(shù)據(jù)模型,它不但與詳細(xì)的DBMS有關(guān),而且還與操作系統(tǒng)和硬件有關(guān),是物理層次的數(shù)據(jù)模型。為了保證數(shù)據(jù)的獨(dú)立性和可移植性,DBMS完成了大部分物理數(shù)據(jù)模型的實(shí)現(xiàn)任務(wù),而設(shè)計(jì)者只需關(guān)懷設(shè)計(jì)索引等特殊構(gòu)造即可。1.1.3 常用數(shù)據(jù)庫引見1AccessAccess是Microsoft的產(chǎn)品,伴隨著Office一同發(fā)布。作為一個(gè)單文件的數(shù)

19、據(jù)庫系統(tǒng),它運(yùn)用簡單,但是功能并不強(qiáng)大,不支持事務(wù)、觸發(fā)器、存儲(chǔ)過程等運(yùn)用。不適用于對(duì)可靠性要求較高的場所。2HSQLDBHSQLDB是一個(gè)開源純Java的數(shù)據(jù)庫,小巧方便。具有規(guī)范的SQL語法和Java接口,支持事務(wù)處置,支持Java存儲(chǔ)過程和函數(shù)。它屬于BSD的license,可以自在下載,并且可以安裝運(yùn)用在商業(yè)產(chǎn)品之上。3SQLITESQLITE是開源單一文件數(shù)據(jù)庫。支持ACID事務(wù),觸發(fā)器;零配置,不需安裝,支持?jǐn)?shù)據(jù)大小達(dá)2TB。但它不支持外鍵,內(nèi)部采用UTF8存儲(chǔ)數(shù)據(jù),對(duì)于中文數(shù)據(jù)的處置,都必需調(diào)用編碼函數(shù),略有不便。4SQL ServerSQL Server是由微軟開發(fā)的一款數(shù)據(jù)庫

20、管理系統(tǒng)。其最新版本是SQL Server 2021,適宜于中小企業(yè)運(yùn)用,只能在Windows操作系統(tǒng)下運(yùn)轉(zhuǎn)。目前包含多種版本,如學(xué)習(xí)版、任務(wù)組版、開發(fā)版、規(guī)范版、企業(yè)版和挪動(dòng)版,用戶可以根據(jù)實(shí)踐情況選擇適宜本人的版本。但是除學(xué)習(xí)版外,其他版本價(jià)錢不菲,其中企業(yè)版售價(jià)約為35萬人民幣,規(guī)范版售價(jià)約為7萬人民幣。5OracleOracle數(shù)據(jù)庫是Oracle公司的產(chǎn)品,是目前最為流行的大型數(shù)據(jù)庫之一,可以運(yùn)轉(zhuǎn)在Windows和類UNIX等多種操作系統(tǒng)下,適宜于大型企業(yè)運(yùn)用。目前最新版本是Oracle 11g。Oracle提供的功能是其他中小型數(shù)據(jù)庫望塵莫及的。Oracle提供了高度的可用性、可伸

21、縮性、可管理性和平安性,支持集群運(yùn)用、數(shù)據(jù)倉庫、內(nèi)容管理等功能。但Oracle數(shù)據(jù)庫價(jià)錢較高,各項(xiàng)產(chǎn)品的售價(jià)大約在2萬50萬人民幣不等。而且,Oracle數(shù)據(jù)庫的學(xué)習(xí)周期較長,不易掌握。6DB2DB2是IBM5個(gè)軟件品牌之一,屬于大型數(shù)據(jù)庫,是Oracle的強(qiáng)有力的競爭對(duì)手。可以運(yùn)轉(zhuǎn)在多種不同的操作系統(tǒng)下,包括UNIX、Windows、AS/400和OS/390。DB2對(duì)商業(yè)智能、內(nèi)容和記錄管理、異構(gòu)數(shù)據(jù)庫集成有較好的支持。其價(jià)錢大約在2萬美圓左右。1.2 MySQL簡介一開場MySQL是作為小型輕量級(jí)關(guān)系數(shù)據(jù)庫推出的,主要定位于小型信息系統(tǒng)開發(fā)中的數(shù)據(jù)管理。近年來,隨著其研發(fā)技術(shù)的不斷提高和

22、版本的繼續(xù)晉級(jí),MySQL在運(yùn)用開發(fā)中正表現(xiàn)出越來越出色的穩(wěn)定性和可靠性。1.2.1 MySQL是什么MySQL是最流行的開放源碼SQL數(shù)據(jù)庫管理系統(tǒng),它是由MySQL AB公司開發(fā)、發(fā)布并支持的。MySQLAB是由多名MySQL開發(fā)人興辦的一家商業(yè)公司。它是一家第二代開放源碼公司,結(jié)合了開放源碼價(jià)值取向、方法和勝利的商業(yè)模型。MySQL的正式發(fā)音是My Ess Que Ell而不是my sequel。MySQL的網(wǎng)站MySQL上給出了關(guān)于MySQL的最新信息。在本書撰寫時(shí),MySQL的最新版本為6.0,但假設(shè)無特殊闡明,本書中以MySQL5.1為例進(jìn)展論述。MySQL是一種數(shù)據(jù)庫管理系統(tǒng)。數(shù)

23、據(jù)庫是數(shù)據(jù)的構(gòu)造化集合。它可以是任何東西,從簡單的購物清單到畫展,或企業(yè)網(wǎng)絡(luò)中的海量信息。要想將數(shù)據(jù)添加到數(shù)據(jù)庫,或訪問、處置計(jì)算機(jī)數(shù)據(jù)庫中保管的數(shù)據(jù),需求運(yùn)用數(shù)據(jù)庫管理系統(tǒng),如MySQL效力器。計(jì)算機(jī)是處置大量數(shù)據(jù)的理想工具,因此,數(shù)據(jù)庫管理系統(tǒng)在計(jì)算機(jī)運(yùn)用方面扮演著關(guān)鍵的角色,或是作為獨(dú)立的適用工具,或是作為其他運(yùn)用程序的組成部分。MySQL是一種關(guān)系數(shù)據(jù)庫管理系統(tǒng)。關(guān)系數(shù)據(jù)庫將數(shù)據(jù)保管在不同的表中,而不是將一切數(shù)據(jù)放在一個(gè)大的倉庫內(nèi)。這樣就添加了速度并提高了靈敏性。MySQL的SQL指的是“構(gòu)造化查詢言語。SQL是用于訪問數(shù)據(jù)庫的最常用規(guī)范化言語,它是由ANSI/ISOSQL規(guī)范定義的。

24、SQL規(guī)范自1986年以來不斷演化開展,有數(shù)種版本。1.2.2 MySQL的特點(diǎn)開放源代碼“開放源碼意味著任何人都能運(yùn)用和改動(dòng)軟件。任何人都能從Internet上下載MySQL軟件,而無須支付任何費(fèi)用。假設(shè)情愿,可以研討源碼并進(jìn)展恰當(dāng)?shù)母?,以滿足本人的需求。MySQL軟件采用了GPLGNU通用公共答應(yīng)證, HYPERLINK /licenses/ t _top /licenses/,定義了在不同情況下可以用軟件做的事和不可做的事。假設(shè)對(duì)GPL不稱心,或需求在商業(yè)運(yùn)用程序中嵌入MySQL代碼,也可從MySQL AB公司購買商業(yè)答應(yīng)版本。由此可見,與普通的商用數(shù)據(jù)庫相

25、比,MySQL不僅在價(jià)錢上遠(yuǎn)遠(yuǎn)勝于它們,而且由于源代碼的開發(fā),提供了商用數(shù)據(jù)庫沒有的靈敏性。反響速度數(shù)據(jù)庫的反響速度是相當(dāng)重要的。它直接決議了運(yùn)用系統(tǒng)的性能。在MySQL網(wǎng)站公布的基準(zhǔn)測試結(jié)果發(fā)現(xiàn),MySQL對(duì)于某些指令的執(zhí)行速度,甚至比SQLServer和Oracle等商用數(shù)據(jù)庫更快。MySQL效力器已能提供豐富和有用的功能。它具有良好的連通性、速度和平安性,這使得MySQL很適宜作為Internet上的數(shù)據(jù)庫。易用性不像Oracle或者DB2等大型數(shù)據(jù)庫系統(tǒng),MySQL的易用性相當(dāng)好。初學(xué)者幾乎只需求幾個(gè)小時(shí)就能掌握MySQL的根本知識(shí)。同時(shí),MySQL有一本詳細(xì)的運(yùn)用手冊(cè)、大量的在線指南

26、、一個(gè)廣泛的開發(fā)社區(qū)和大量的書籍。因此,學(xué)習(xí)MySQL不會(huì)給用戶帶來任何不便和不快。同時(shí),MySQL提供了良好的GUI工具,使得MySQL的運(yùn)用和管理更加方便、簡捷。多種任務(wù)方式 MySQL數(shù)據(jù)庫軟件是一種客戶端/效力器系統(tǒng),由支持不同后端的一個(gè)多線程SQL效力器、數(shù)種不同的客戶端程序和庫、眾多管理工具和廣泛的運(yùn)用編程接口API組成。MySQL效力器還有嵌入式版本。它可以集成到任何運(yùn)用程序當(dāng)中。支持多種數(shù)據(jù)類型MySQL支持帶符號(hào)/無符號(hào)整數(shù),1、2、3、4、8字節(jié)長,F(xiàn)LOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、TIMESTAM

27、P、YEAR、SET、ENUM以及OpenGIS空間類型,定長和可變長度記錄。這些數(shù)據(jù)類型可以滿足幾乎一切運(yùn)用程序的運(yùn)用。為了優(yōu)化存儲(chǔ),在任何情況下均應(yīng)運(yùn)用最準(zhǔn)確的類型。例如,假設(shè)列的值的范圍為199999,假設(shè)運(yùn)用整數(shù),那么MEDIUMINT UNSIGNED是最好的類型。在一切可以表示該列值的類型中,該類型運(yùn)用的存儲(chǔ)空間最少??缮炜s性和限制MySQL效力器可以處置含5千萬條記錄的數(shù)據(jù)庫,甚至有些用戶將MySQL用于含60000個(gè)表和約50億行的數(shù)據(jù)庫。每個(gè)表可支持高達(dá)64條索引在MySQL4.1.2之前為32條。每條索引可由116個(gè)列或列元素組成。最大索引寬度為1000字節(jié)在MySQL 4

28、.1.2之前為500字節(jié)。索引可使器具備CHAR、VARCHAR、BLOB或TEXT列類型的列前綴。在MySQL5.1中所支持的表的大小幾乎可以滿足任何用戶的需求。實(shí)踐上,表的大小限制并不取決于MySQL本身,而取決于操作系統(tǒng)所支持的文件系統(tǒng)。InnoDB存儲(chǔ)引擎將InnoDB表保管在一個(gè)表空間內(nèi),該表空間可由數(shù)個(gè)文件創(chuàng)建。這樣,表的大小就能超越單獨(dú)文件的最大容量。表空間可包括原始磁盤分區(qū),從而使得很大的表成為能夠。表空間的最大容量為64TB。在表1-2中,列出了一些關(guān)于操作系統(tǒng)文件大小限制的例如。表1-2 操作系統(tǒng)文件大小的限制操 作 系 統(tǒng)文件大小的限制Linux 2.2-Intel 32

29、-bit2GBLFS: 4GBLinux 2.4+using ext3 filesystem4TBSolaris 9/1016TBNetWare w/NSS filesystem8TBwin32 w/ FAT/FAT322GB/4GBwin32 w/ NTFS2TB能夠更大MacOS X w/ HFS+2TB多用戶支持MySQL是一個(gè)完全多用戶系統(tǒng),這意味著多個(gè)客戶可以同時(shí)訪問和運(yùn)用一個(gè)或更多的MySQL數(shù)據(jù)庫。這對(duì)于網(wǎng)絡(luò)的運(yùn)用程序要求支持由多個(gè)遠(yuǎn)程客戶同時(shí)建立的銜接是具有特殊意義的。MySQL也包括一個(gè)強(qiáng)有力的、靈敏的權(quán)限系統(tǒng),它允許管理者運(yùn)用基于用戶和基于主機(jī)的認(rèn)證方案的組合來限制對(duì)敏感數(shù)

30、據(jù)的訪問??梢浦残訫ySQL主要在LinuxSuSE和Red Hat、FreeBSD和Sun Solaris版本8和版本9上開發(fā)。但是可以移植到多種操作系統(tǒng)。要求MySQL效力器支持線程,客戶端那么需求C+編譯器即可。MySQL支持的系統(tǒng)包括Linux、Solaria、FreeBSD、OS/l、MacOS以及Windows 95/98/Me/2000/XP和NT,它可以在一系列體系構(gòu)造上運(yùn)轉(zhuǎn),包括Intel x86、Alpha、SPARC、PowaPC和IA64,它還支持從低檔的386系列到高檔的Pentinum機(jī)器和IBM.zSeries大型機(jī)等很多的硬件配置。遵照現(xiàn)有規(guī)范MySQL效力器可

31、以任務(wù)在不同的SQL方式下,并能針對(duì)不同的客戶端以不同的方式運(yùn)用這些方式。這樣,運(yùn)用程序就能對(duì)效力器操作進(jìn)展量身定制以滿足本人的需求。這類方式定義了MySQL應(yīng)支持的SQL語法,以及應(yīng)該在數(shù)據(jù)上執(zhí)行何種確認(rèn)檢查。這樣,就能在眾多不同的環(huán)境下,與其他數(shù)據(jù)庫效力器一同更容易地運(yùn)用MySQL??梢赃\(yùn)用-sql-mode=modes選項(xiàng),經(jīng)過啟動(dòng)MySQL來設(shè)置默許的SQL方式。從MySQL 4.1開場,也能在啟動(dòng)之后,運(yùn)用SET SESSION|GLOBAL sql_mode=modes語句,經(jīng)過設(shè)置sql_mode變量更改方式。國際化MySQL效力器可運(yùn)用多種言語向客戶端提供錯(cuò)誤音訊,極大地優(yōu)化了

32、與用戶的交互 方式。對(duì)數(shù)種不同字符集的全面支持,包括gbk、gb2321、latin1cp1252、german、big5、ujis等。從MySQL 4.1開場,提供了對(duì)Unicode的支持。 廣泛的運(yùn)用程序支持MySQL提供面向各種編程言語的API,如C、C+、ODBC、Java、PHP、Perl、Python、Tcl等的API。因此,具有廣泛的順應(yīng)性。事務(wù)支持事務(wù)是保證數(shù)據(jù)庫并發(fā)性和數(shù)據(jù)一致性的重要手段之一。它是用戶定義的一組操作序列的集合,是數(shù)據(jù)恢復(fù)和并發(fā)控制的根本單位。一個(gè)事務(wù)中的操作,要么全部被執(zhí)行,要么全部不被執(zhí)行。MySQL提供了事務(wù)和非事務(wù)支持的存儲(chǔ)引擎。InnoDB存儲(chǔ)引擎提

33、供了全面的ACID兼容性。對(duì)于那些非事務(wù)支持的存儲(chǔ)引擎,MySQL也提供了保證數(shù)據(jù)一致性的有效方法?!咎貏e提示】所謂ACID,即原子性Atomicity、一致性Consistency、隔離性Isolation和繼續(xù)性Durability,是事務(wù)所具備的4個(gè)特性。原子性指一個(gè)事務(wù)是一個(gè)不可分割的邏輯任務(wù)單位,事務(wù)中一切的操作要么全部完成,要么全都不做。一致性指事務(wù)的執(zhí)行結(jié)果必需使數(shù)據(jù)庫從一個(gè)一致性形狀變到另一個(gè)一致性形狀。隔離性指一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾,即事務(wù)內(nèi)部的操作及其一切的數(shù)據(jù)對(duì)并發(fā)執(zhí)行的其他事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè)事務(wù)互不干擾。繼續(xù)性指一個(gè)事務(wù)一旦被提交,它對(duì)數(shù)據(jù)庫中數(shù)據(jù)的

34、改動(dòng)是耐久的,其他操作或缺點(diǎn)不對(duì)其產(chǎn)生影響,即當(dāng)事務(wù)被提交后,即使系統(tǒng)解體,但事務(wù)對(duì)數(shù)據(jù)庫的影響依然存在而且耐久。外鍵支持外鍵是保證參照完好性的重要手段之一。InnoDB存儲(chǔ)引擎支持對(duì)外鍵約束的檢查功能,這些約束包括CASCADE、ON DELETE和ONUPDATE。對(duì)于InnoDB之外的其他存儲(chǔ)引擎,MySQL效力器可以解析CREATE TABLE語句中的FOREIGN KEY語法,但不能運(yùn)用或保管它。視圖支持MySQL5.0開場曾經(jīng)支持視圖功能包括可更新視圖。在5.0.1和更高版本中,提供了二進(jìn)制版的視圖功能。View視圖非常有用,它允許用戶像單個(gè)表那樣訪問一組關(guān)系表,它提供了對(duì)外方式的

35、支持,有利于數(shù)據(jù)庫設(shè)計(jì)更好地面向終端用戶。視圖也能限制對(duì)行的訪問特定表的子集。對(duì)于列控制的訪問,可運(yùn)用MySQL效力器中的高級(jí)權(quán)限系統(tǒng)。存儲(chǔ)過程和觸發(fā)器MySQL5.1中曾經(jīng)支持存儲(chǔ)過程和根本的觸發(fā)器功能。觸發(fā)器是與表有關(guān)的命名數(shù)據(jù)庫對(duì)象,當(dāng)表上出現(xiàn)特定事件時(shí),將激活該對(duì)象。采用多處置器和多線程為了利用多處置器體系構(gòu)造,MySQL采用多線程設(shè)計(jì),輪詢?cè)诙鄠€(gè)處置器之間分派線程,以到達(dá)更高的并行度。根據(jù)不同的平臺(tái),MySQL運(yùn)用各種線程程序包。復(fù)制復(fù)制是一種數(shù)據(jù)發(fā)布機(jī)制,它運(yùn)轉(zhuǎn)在遠(yuǎn)間隔 的地方放置表和數(shù)據(jù)庫副本,以運(yùn)用戶可以更加方便地訪問它們。MySQL支持單項(xiàng)、異步的復(fù)制。產(chǎn)品數(shù)據(jù)庫就是運(yùn)用這種

36、復(fù)制機(jī)制的典型。例如,一個(gè)國內(nèi)或全球公司能夠只需一個(gè)通用的集中更新產(chǎn)品的數(shù)據(jù)庫,但是每個(gè)本地辦公室都能運(yùn)用它。其方法不是每次需求訪問數(shù)據(jù)庫時(shí)都查詢遠(yuǎn)程的表,而是為每個(gè)人發(fā)布一個(gè)副本,這樣的方法會(huì)更有效,由于每個(gè)辦公室只負(fù)擔(dān)一次傳輸?shù)拈_銷。復(fù)制機(jī)制依賴MySQL日志機(jī)制來追蹤對(duì)數(shù)據(jù)庫的一切改動(dòng)。主數(shù)據(jù)庫把這個(gè)日志傳送給從數(shù)據(jù)庫,然后從數(shù)據(jù)庫在本人的數(shù)據(jù)上運(yùn)用這個(gè)日志。一個(gè)從數(shù)據(jù)庫不能阻止用戶在復(fù)制環(huán)境以外的情況下更新日志,因此必需確保這種情況不會(huì)發(fā)生,以確保數(shù)據(jù)庫同步確實(shí)信度。1.2.3 MySQL的運(yùn)用對(duì)于中小型網(wǎng)站的后臺(tái)數(shù)據(jù)庫,假設(shè)不情愿選擇微軟的產(chǎn)品與MySQL相比它們非常昂貴,現(xiàn)實(shí)上,M

37、ySQL正是SQL Server的強(qiáng)勁對(duì)手,那么MySQL幾乎成為獨(dú)一的選擇??梢哉f,MySQL是中小型數(shù)據(jù)庫的首選和主流產(chǎn)品。然而,MySQL不僅局限于中小型數(shù)據(jù)庫領(lǐng)域,由于它極好的擴(kuò)展性,作為大型數(shù)據(jù)庫運(yùn)用,MySQL依然有不俗的表現(xiàn),本節(jié)將簡單引見一下MySQL作為大型數(shù)據(jù)庫運(yùn)用的案例。1Cox通訊公司用MySQL構(gòu)建大型數(shù)據(jù)倉庫Cox是全美第四大有線電視提供商,為大約630萬用戶提供效力。作為財(cái)富 500 強(qiáng)之一,Cox公司以其高容量、可靠寬帶傳送網(wǎng)絡(luò)和優(yōu)秀的客戶效力著稱。為了保證優(yōu)質(zhì)的性能和客戶效力級(jí)別,Cox開發(fā)了一個(gè)宏大的數(shù)據(jù)倉庫運(yùn)用。MySQL數(shù)據(jù)庫運(yùn)用于這個(gè)企業(yè)關(guān)鍵性系統(tǒng)的中

38、心。Cox運(yùn)用兩臺(tái)IBMx系列效力器做成了雙機(jī)MySQL效力器。用于對(duì)外提供查詢和實(shí)時(shí)輪詢polling每天大約10萬次。MySQL數(shù)據(jù)庫管理各種有線modem信息,維護(hù)電纜固件,向用戶提供實(shí)時(shí)支持接口、加速內(nèi)部、用戶趨勢(shì)和分析。同時(shí),該數(shù)據(jù)庫集成了公司預(yù)定的輪詢和用于數(shù)據(jù)發(fā)掘以建立射頻車間的永久錯(cuò)誤識(shí)別規(guī)范。每天,Cox經(jīng)過MySQL從120多萬有線modem中取出數(shù)據(jù)。整個(gè)數(shù)據(jù)庫包含超越3600個(gè)表和20億行數(shù)據(jù)。每兩小時(shí)MySQL處置大約400萬次插入操作。Cox運(yùn)用LAMP軟件架構(gòu),運(yùn)用Linux+Apache+MySQL+PHP+Perl輪詢運(yùn)用Perl言語編寫,同時(shí)用Perl搜集輪

39、詢的數(shù)據(jù)并存入主MySQL數(shù)據(jù)庫中。運(yùn)用基于Web的前端采用 PHP,到達(dá)了報(bào)告和實(shí)時(shí)輪詢的特性。2Los Alamos國家實(shí)驗(yàn)室依托MySQL管理超越7TB的數(shù)據(jù)Los Alamos國家實(shí)驗(yàn)室是美國能源部下屬28個(gè)實(shí)驗(yàn)室之一,是新墨西哥最大的研討所。該研討實(shí)驗(yàn)室有8個(gè)數(shù)據(jù)庫,包含科學(xué)文獻(xiàn)以及相關(guān)元數(shù)據(jù),如摘要、作者簡歷和參考書目等。每個(gè)數(shù)據(jù)庫于不同的提供者,數(shù)據(jù)存成了特殊的格式,研討人員查找起來非常不方便。為處理這個(gè)問題,該實(shí)驗(yàn)室開發(fā)了一個(gè)擔(dān)任的數(shù)據(jù)庫運(yùn)用SerchPlus,包含5500萬科學(xué)期刊文獻(xiàn),能在任何地方經(jīng)過閱讀器查詢和訪問。作為一個(gè)高性能的數(shù)據(jù)庫,MySQL在Los Alamos

40、實(shí)驗(yàn)室強(qiáng)健、平安和可擴(kuò)展的SerchPlus系統(tǒng)中起到了關(guān)鍵作用。MySQL在工程中表達(dá)了以下優(yōu)勢(shì)。高性能:MySQL存儲(chǔ)了14億行數(shù)據(jù),采用MyISAM存儲(chǔ)引擎使運(yùn)用呼應(yīng)時(shí)間非常迅速。平安性:采用MySQL提供平安登錄。復(fù)制:查詢圖書館將數(shù)據(jù)庫在防火墻外也復(fù)制一套,這樣同時(shí)能對(duì)內(nèi)部人員和外部人員運(yùn)用。3Evite公司依托MySQL傳送數(shù)以百萬的約請(qǐng)Evite是全球領(lǐng)先的交互多媒體公司InterActive公司的免費(fèi)在線活動(dòng)方案效力。Evite網(wǎng)站向600萬用戶提供效力,每個(gè)月發(fā)出900萬份約請(qǐng)函。Evite 的勝利使得它的流量每年以80%的速度增長。以前Evite運(yùn)用Oracle長達(dá)4年。但

41、他們覺得Oracle非常昂貴,而且對(duì)沒有閱歷的員工來說很難運(yùn)用。同時(shí),公司需求性能和擴(kuò)展性好的數(shù)據(jù)庫來滿足日益增長的業(yè)務(wù)需求。僅用了一年,MySQL就成為Evite公司IT架構(gòu)中的關(guān)鍵部分。幾乎一切Evite網(wǎng)站都運(yùn)用MySQL,同時(shí)它也用來作為企業(yè)級(jí)關(guān)鍵性的數(shù)據(jù)倉庫。MySQL在運(yùn)用中,表達(dá)了以下優(yōu)勢(shì)。運(yùn)用簡單:無論是開發(fā)者還是管理人員都很容易上手,無須新增數(shù)據(jù)庫專家。可靠性:在一年多的時(shí)間里,MySQL非常穩(wěn)定可靠,跟上了流量增長80%的需求。支持全文本搜索:經(jīng)過全文本搜索,Evite將過濾副本的時(shí)間從20小時(shí)降到了兩 小時(shí)。1.3 MySQL體系構(gòu)造綜述在MySQL 5.1中,MySQL

42、 AB引入了新的插件式存儲(chǔ)引擎體系構(gòu)造,允許將存儲(chǔ)引擎加載到正在運(yùn)轉(zhuǎn)的MySQL效力器中。1.3.1 插件式存儲(chǔ)引擎體系構(gòu)造數(shù)據(jù)庫管理人員經(jīng)過選擇相應(yīng)的存儲(chǔ)引擎,而不是經(jīng)過編碼的方式來實(shí)現(xiàn)特定的需求。由于MySQL效力器體系構(gòu)造在存儲(chǔ)級(jí)別上提供了一致和簡單的運(yùn)用模型和API,運(yùn)用程序編程人員和DBA可以不再思索一切的底層實(shí)施細(xì)節(jié)。因此,雖然不同的存儲(chǔ)引擎具有不同的才干,運(yùn)用程序與存儲(chǔ)引擎之間是相對(duì)獨(dú)立的。在圖1-3中,以圖形方式引見了MySQL插件式存儲(chǔ)引擎體系構(gòu)造。圖1-3 MySQL插件式存儲(chǔ)引擎體系構(gòu)造插件式存儲(chǔ)引擎體系構(gòu)造提供了規(guī)范的管理和支持效力的集合。存儲(chǔ)引擎本身是數(shù)據(jù)庫效力器的組

43、件,擔(dān)任對(duì)在物理效力器層上的根本數(shù)據(jù)進(jìn)展實(shí)踐的I/O操作。這是一種高效的模塊化體系構(gòu)造,它為那些希望專注于特定運(yùn)用需求的人員提供了宏大的便利,這類特殊運(yùn)用需求包括數(shù)據(jù)倉庫、事務(wù)處置、高可用性等,同時(shí)還能利用獨(dú)立于任何存儲(chǔ)引擎的一組接口和效力。運(yùn)用程序編程人員和DBA經(jīng)過位于存儲(chǔ)引擎之上的API和效力層來運(yùn)用MySQL數(shù)據(jù)庫。由于不是直接操作各種存儲(chǔ)引擎,所以即使由于運(yùn)用程序需求而改動(dòng)了底層的存儲(chǔ)引擎,或需求添加一個(gè)或多個(gè)額外的存儲(chǔ)引擎,并不需求進(jìn)展大的編碼或者額外的操作。MySQL效力器體系構(gòu)造提供了一致和易于運(yùn)用的API,這類API適用于多種存儲(chǔ)引擎,經(jīng)過這種方式,該構(gòu)造將運(yùn)用程序與存儲(chǔ)引擎

44、的底層復(fù)雜性隔分開來。1.3.2 公共MySQL數(shù)據(jù)庫效力器層MySQL插件式存儲(chǔ)引擎是MySQL數(shù)據(jù)庫效力器中的組件,擔(dān)任為數(shù)據(jù)庫執(zhí)行實(shí)踐的數(shù)據(jù)I/O操作,并且提供一些特定的運(yùn)用例如視圖、外鍵、事務(wù)支持等。運(yùn)用特殊存儲(chǔ)引擎的主要優(yōu)點(diǎn)之一在于,為了實(shí)現(xiàn)每種特殊的運(yùn)用僅需提供特殊運(yùn)用所需的特性,因此,數(shù)據(jù)庫中的系統(tǒng)開銷較小,最終結(jié)果具有更有效和更高的數(shù)據(jù)庫性能。這也是MySQL被一直視為具有高性能的緣由之一,在行業(yè)規(guī)范基準(zhǔn)方面,它能匹敵或擊敗專有的整體式數(shù)據(jù)庫。從技術(shù)角度上看,在不同的存儲(chǔ)引擎中,各種存儲(chǔ)引擎所提供的不同效力主要有以下幾個(gè)方面的區(qū)別。并發(fā)性:某些運(yùn)用程序比其他運(yùn)用程序具有更多的顆

45、粒級(jí)鎖定要求如行級(jí)鎖定。選擇正確的鎖定戰(zhàn)略可以減少開銷,并有助于整體性能的提升。它還包括對(duì)多種才干的支持,如多版本并發(fā)性控制MVCC或“快照讀取等。事務(wù)支持:并非一切的運(yùn)用程序都需求事務(wù),但對(duì)確實(shí)需求事務(wù)的運(yùn)用程序來說,可以選擇支持事務(wù)的存儲(chǔ)引擎,例如InnoDB引擎。參照完好性:經(jīng)過DDL定義的外鍵,效力器需求強(qiáng)迫堅(jiān)持關(guān)系數(shù)據(jù)庫的援用完 整性。物理存儲(chǔ):包括各種各樣的物理格式,從表和索引的總的頁大小、存儲(chǔ)數(shù)據(jù)所需的格式到物理磁盤。索引支持:不同的運(yùn)用程序傾向于采用不同的索引戰(zhàn)略,每種存儲(chǔ)引擎通常有本人的編制索引方法,但某些索引方法如B-tree索引對(duì)幾乎一切的存儲(chǔ)引擎來說是一樣的。內(nèi)存高速緩

46、沖:不同的運(yùn)用程序往往需求不同的緩存區(qū)大小和分配戰(zhàn)略,雖然某些內(nèi)存高速緩沖對(duì)一切存儲(chǔ)引擎來說是一樣的如用于用戶銜接的高速緩沖、MySQL的高速查詢高速緩沖等,而各種存儲(chǔ)引擎不同的內(nèi)存高速緩沖管理方式可以根據(jù)運(yùn)用程序需求進(jìn)展選擇。性能:包括針對(duì)并行操作的多I/O線程、線程并發(fā)性、數(shù)據(jù)庫檢查點(diǎn)、成批插入處置等。每個(gè)存儲(chǔ)引擎都是為了實(shí)現(xiàn)呼應(yīng)特定的需求而設(shè)計(jì)的。因此,在設(shè)計(jì)數(shù)據(jù)庫時(shí),應(yīng)該盡量防止運(yùn)用我們并不需求的特性,選擇適宜的存儲(chǔ)引擎。這樣可以減少效力器額外的負(fù)擔(dān),提高效力器的效率。例如,在一個(gè)根本不需求事務(wù)的系統(tǒng)中,就應(yīng)該防止選用支持事務(wù)的存儲(chǔ)引擎。這也就是MySQL插件式存儲(chǔ)引擎構(gòu)造比運(yùn)用專門的

47、存儲(chǔ)引擎構(gòu)造優(yōu)越的 地方?!咎貏e提示】對(duì)于整個(gè)效力器或方案,并不一定要運(yùn)用一樣的存儲(chǔ)引擎,可以為方案中的每個(gè)表運(yùn)用不同的存儲(chǔ)引擎,以滿足該表特定的需求,這點(diǎn)很重要。1.4 MySQL引擎 在默許情況下,MySQL支持3個(gè)引擎:ISAM、 MyISAM和HEAP。另外兩種類型,即InnoDB和BerkleyBDB也常運(yùn)用。用戶能用的數(shù)據(jù)庫引擎取決于MySQL在安裝時(shí)是如何被編譯的。要添加一個(gè)新的引擎,就必需重新編譯MySQL。1.4.1 選擇存儲(chǔ)引擎MySQL提供的各種存儲(chǔ)引擎在設(shè)計(jì)時(shí)思索了不同的運(yùn)用情況。為了更有效地運(yùn)用插件式存儲(chǔ)體系構(gòu)造,最好了解各種存儲(chǔ)引擎的優(yōu)點(diǎn)和缺陷。在圖1-4的表格中,

48、概要展現(xiàn)了與MySQL提供的存儲(chǔ)引擎。圖1-4 MySQL存儲(chǔ)引擎概要下面簡單引見常用的存儲(chǔ)引擎。MyISAM:默許的MySQL插件式存儲(chǔ)引擎,它是在Web、數(shù)據(jù)倉儲(chǔ)和其他運(yùn)用環(huán)境下最常運(yùn)用的存儲(chǔ)引擎之一。經(jīng)過設(shè)置STORAGE_ENGINE配置變量,可以更改MySQL效力器的默許存儲(chǔ)引擎。InnoDB:用于事務(wù)處置運(yùn)用程序,具有眾多特性,包括ACID事務(wù)支持。BDB:可替代InnoDB的事務(wù)引擎,支持COMMIT、ROLLBACK和其他事務(wù)特性。Memory:將一切數(shù)據(jù)保管在RAM中,在需求快速查找援用和其他類似數(shù)據(jù)的環(huán)境下,可提供極快的訪問。Merge:允許MySQLDBA或開發(fā)人員將一系

49、列等同的MyISAM表以邏輯方式組合在一同,并作為一個(gè)對(duì)象援用它們。適宜于諸如數(shù)據(jù)倉儲(chǔ)等VLDB環(huán)境。Archive:為大量很少援用的歷史、歸檔或平安審計(jì)信息的存儲(chǔ)和檢索提供了完美的處理方案。Federated:可以將多個(gè)分別的MySQL效力器鏈接起來,從多個(gè)物理效力器創(chuàng)建一個(gè)邏輯數(shù)據(jù)庫。非常適宜于分布式環(huán)境或數(shù)據(jù)集市的運(yùn)用。Cluster/NDB:MySQL的簇式數(shù)據(jù)庫引擎,尤其適宜于具有高性能查找要求的運(yùn)用程序,這類查找需求還要求具有最高的正常任務(wù)時(shí)間和可用性。Other:其他存儲(chǔ)引擎包括CSV援用由逗號(hào)隔開的用作數(shù)據(jù)庫表的文件,Blackhole用于暫時(shí)制止對(duì)數(shù)據(jù)庫的運(yùn)用程序輸入,以及E

50、xample引擎可為快速創(chuàng)建定制的插件式存儲(chǔ)引擎提供協(xié)助 。特別要留意,以下存儲(chǔ)引擎提供了事務(wù)支持。InnoDB:經(jīng)過MVCC支持事務(wù),允許COMMIT、ROLLBACK和保管點(diǎn)。NDB:經(jīng)過MVCC支持事務(wù),允許COMMIT和ROLLBACK。BDB:支持事務(wù),允許COMMIT和ROLLBACK?!咎貏e提示】MVCCMultiversion Concurrency Control是指多版本并發(fā)控制,是一種數(shù)據(jù)庫并發(fā)控制的手段。當(dāng)檢索數(shù)據(jù)庫時(shí),每個(gè)事務(wù)都看到一個(gè)數(shù)據(jù)的一段時(shí)間前的快照一個(gè)數(shù)據(jù)庫版本,而不論正在處置的數(shù)據(jù)當(dāng)前的形狀。這樣,假設(shè)對(duì)每個(gè)數(shù)據(jù)庫會(huì)話進(jìn)展事務(wù)隔離,即可防止一個(gè)事務(wù)看到由于

51、其他并行的事務(wù)更新同一行數(shù)據(jù)而導(dǎo)致的不一致的數(shù)據(jù)。運(yùn)用MVCC多版本并發(fā)控制比鎖模型的主要優(yōu)點(diǎn)是在MVCC中,對(duì)檢索讀數(shù)據(jù)的鎖要求與寫數(shù)據(jù)的鎖要求不沖突,所以讀不會(huì)阻塞寫,而寫也從不阻塞讀。1.4.2 運(yùn)用存儲(chǔ)引擎可以在創(chuàng)建新表時(shí)指定存儲(chǔ)引擎,或經(jīng)過運(yùn)用ALTER TABLE語句指定存儲(chǔ)引擎。 要想在創(chuàng)建表時(shí)指定存儲(chǔ)引擎,可以運(yùn)用ENGINE參數(shù):CREATE TABLE engineTest(id INT) ENGINE = MyISAM;要想更改已有表的存儲(chǔ)引擎,可運(yùn)用ALTER TABLE語句:ALTER TABLE engineTest ENGINE = ARCHIVE;1.4.3 M

52、yISAM存儲(chǔ)引擎1MyISAM的特點(diǎn)MyISAM是默許存儲(chǔ)引擎。它基于更老的ISAM引擎,但提供了許多擴(kuò)展功能留意MySQL 5.1不支持ISAM。 每個(gè)MyISAM在磁盤上存儲(chǔ)成3個(gè)文件。每個(gè)文件以表名命名,擴(kuò)展名指明了文件的類型。.frm文件存儲(chǔ)表定義。數(shù)據(jù)文件的擴(kuò)展名為.MYDMYData。索引文件的擴(kuò)展名為.MYIMYIndex。 要明確指定運(yùn)用一個(gè)MyISAM表格,可以運(yùn)用ENGINE表選項(xiàng):CREATE TABLE t (i INT) ENGINE = MYISAM;老版本的MySQL運(yùn)用TYPE而不是ENGINE例如,TYPE = MYISAM。MySQL 5.1為向下兼容而支

53、持這個(gè)語法,但引薦運(yùn)用新的關(guān)鍵字ENGINE。 除非默許存儲(chǔ)引擎被改動(dòng),否那么不需求顯示聲明MyISAM引擎。 MyISAM存儲(chǔ)引擎有以下一些特征:1一切數(shù)據(jù)值先存儲(chǔ)低字節(jié)。這使得數(shù)據(jù)庫和操作系統(tǒng)分別。二進(jìn)制兼容的獨(dú)一要求是機(jī)器運(yùn)用補(bǔ)碼和IEEE浮點(diǎn)格式現(xiàn)代的大部分計(jì)算機(jī)都支持這兩種格式。2先存儲(chǔ)數(shù)據(jù)低字節(jié)并不會(huì)嚴(yán)重地影響速度;數(shù)據(jù)行中的字節(jié)普通是沒有對(duì)齊的,順序讀取一個(gè)沒有對(duì)齊的字節(jié)與反向讀取這個(gè)字節(jié)所占用幾乎一樣的資源。而為了獲得更好的索引緊縮,一切的鍵值都先存儲(chǔ)高字節(jié)。 3假設(shè)文件系統(tǒng)和操作系統(tǒng)支持大文件,那么MyISAM也可以支持這些大文件。4一個(gè)MyISAM表最多可以有232行。假設(shè)

54、希望MyISAM支持更大的表,可以運(yùn)用-with-big-tables選項(xiàng),那么表的大小可達(dá)2322行。5每張MyISAM表支持最多64個(gè)索引。每個(gè)索引最多能有16列。 6最大的鍵長度是1000字節(jié)。假設(shè)鍵長度超越250字節(jié),那么會(huì)運(yùn)用1024字節(jié)的存儲(chǔ)塊去存放這個(gè)鍵。7可以在BLOB和TEXT列上建立索引。8在索引的列中允許出現(xiàn)NULL值,每個(gè)鍵運(yùn)用01個(gè)字節(jié)。 9可以把數(shù)據(jù)文件和索引文件放在不同目錄,運(yùn)用DATA DIRECTORY和INDEX DIRECTORY選項(xiàng)CREATE TABLE可以獲得更高的速度。10每個(gè)字符列可以支持不同的字符集。 11在MyISAM索引文件中有一個(gè)標(biāo)志,它

55、闡明表能否被正確封鎖。假設(shè)用-myisam-recover選項(xiàng)啟動(dòng)MySQLd,MyISAM表在翻開時(shí)會(huì)自動(dòng)檢查,假設(shè)表沒有恰當(dāng)?shù)胤怄i,就會(huì)修復(fù)該表。 12假設(shè)運(yùn)用-update-state選項(xiàng)運(yùn)轉(zhuǎn)myisamchk,它標(biāo)注表為已檢查。myisamchk- fast只檢查那些沒有這個(gè)標(biāo)志的表。 13myisampack可以打包BLOB和VARCHAR列。14含有VARCHAR的表可以有固定或動(dòng)態(tài)記錄長度。15VARCHAR和CHAR列的總長度可以達(dá)64KB。2MyISAM選項(xiàng)配置下面簡單引見幾個(gè)對(duì)MyISAM表行為有影響的MySQLd選項(xiàng)。1-myisam-recover=mode 設(shè)置MyI

56、SAM表解體時(shí)的自動(dòng)恢復(fù)方式。表1-3列舉了Mode的取值。表1-3 Mode的取值及含義選 項(xiàng)描 述DEFAULT與沒有運(yùn)用-myisam-recover選項(xiàng)一樣BACKUP假設(shè)在恢復(fù)過程中,數(shù)據(jù)文件被更改了,將tbl_name.MYD文件備份為tbl_name-datetime.BAKFORCE即使.MYD文件將喪失多行也進(jìn)展強(qiáng)迫恢復(fù)QUICK假設(shè)沒有刪除塊,不要檢查表中的行2-delay-key-write=ALL 不刷新MyISAM表的鍵緩沖區(qū)。假設(shè)指定這個(gè)選項(xiàng),那么不應(yīng)該訪問被另一個(gè)程序占用的MyISAM表例如MySQL效力器或myisamchk,這樣做會(huì)破壞表的索引。以下系統(tǒng)變量影

57、響MyISAM表的行為:bulk_insert_buffer_size 用在塊插入優(yōu)化中的樹緩沖區(qū)的大小,這是對(duì)每個(gè)線程的限制。myisam_max_sort_file_size MySQL在重建MyISAM表索引時(shí)可以運(yùn)用的暫時(shí)文件的最大長度,以字節(jié)為單位。假設(shè)文件大小超越這個(gè)值,建立索引的效率就會(huì)降低。myisam_sort_buffer_size 設(shè)置恢復(fù)表時(shí)運(yùn)用的緩沖區(qū)的大小。假設(shè)用-myisam-recover自動(dòng)恢復(fù)選項(xiàng)啟動(dòng)MySQLd,那么當(dāng)效力器翻開一個(gè)MyISAM表時(shí),假設(shè)發(fā)現(xiàn)以下恣意一種情況:表能否標(biāo)注為解體。表的翻開計(jì)數(shù)器變量不為0,并且效力器以-skip-externa

58、l-locking方式運(yùn)轉(zhuǎn)。將會(huì)進(jìn)展如下操作:檢查表能否有錯(cuò)。假設(shè)效力器發(fā)現(xiàn)一個(gè)錯(cuò)誤,它試著快速表修復(fù)排序且不重新創(chuàng)建數(shù)據(jù)文件。 假設(shè)修復(fù)由于數(shù)據(jù)文件中的一個(gè)錯(cuò)誤而失敗例如,一個(gè)主鍵反復(fù)錯(cuò)誤,效力器會(huì)再次嘗試修復(fù),并重建數(shù)據(jù)文件。 假設(shè)修復(fù)依然失敗,效力器用舊修復(fù)選項(xiàng)方法再重試一次修復(fù)一行接一行地寫,不排序。這個(gè)方法應(yīng)該能修復(fù)任何類型的錯(cuò)誤,并且只需求很少的磁盤空間。 假設(shè)恢復(fù)不可以從之前完成的語句中恢復(fù)一切行,而且沒有為-myisam-recover選項(xiàng)值指定FORCE,自動(dòng)修復(fù)將會(huì)終止,并在錯(cuò)誤日志中寫一條錯(cuò)誤信息:Error: Couldnt repair table: test.g00

59、pages假設(shè)指定FORCE,那么會(huì)出現(xiàn)以下信息:Warning: Found 344 of 354 rows when repairing ./test/g00pages假設(shè)自動(dòng)恢復(fù)方式運(yùn)用BACKUP,恢復(fù)進(jìn)程會(huì)創(chuàng)建名為tbl_name-datetime.BAK的備份文件。這時(shí)可以運(yùn)用一個(gè)腳本,自動(dòng)把這些文件從數(shù)據(jù)庫目錄移到備份媒質(zhì)上。1.4.4 InnoDB存儲(chǔ)引擎1InnoDB概述InnoDB給MySQL提供了具有提交、回滾和解體恢復(fù)才干的事務(wù)平安ACID兼容存儲(chǔ)引擎。InnoDB鎖定在行級(jí)并且也在SELECT語句提供一個(gè)Oracle風(fēng)格的非鎖定讀。這些特征提高了多用戶并發(fā)的性能。In

60、noDB中行級(jí)鎖定適宜非常小的空間,因此沒有在InnoDB中擴(kuò)展鎖定的需求,InnoDB也支持外鍵約束。在SQL查詢中,可以自在地將InnoDB類型表與其他類型的MySQL表混合運(yùn)用。InnoDB是為處置大量數(shù)據(jù)而設(shè)計(jì)的。與其他基于磁盤的關(guān)系數(shù)據(jù)庫引擎相比,它具有較高的CPU效率。InnoDB存儲(chǔ)引擎完全與MySQL效力器整合,InnoDB存儲(chǔ)引擎為在內(nèi)存中建立本人的緩沖池來緩存數(shù)據(jù)和索引。InnoDB在一個(gè)表空間中存儲(chǔ)表和索引,表空間可以包含數(shù)個(gè)文件或原始磁盤分區(qū)。這與MyISAM表不同,在MyISAM表中每個(gè)表被存在單獨(dú)的文件中,因此即使在文件大小被限制在2GB的文件系統(tǒng)上,InnoDB

溫馨提示

  • 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)論