MySQL數(shù)據(jù)庫基礎(chǔ)與實踐 第2版 課件 CH01 數(shù)據(jù)庫設(shè)計基礎(chǔ)_第1頁
MySQL數(shù)據(jù)庫基礎(chǔ)與實踐 第2版 課件 CH01 數(shù)據(jù)庫設(shè)計基礎(chǔ)_第2頁
MySQL數(shù)據(jù)庫基礎(chǔ)與實踐 第2版 課件 CH01 數(shù)據(jù)庫設(shè)計基礎(chǔ)_第3頁
MySQL數(shù)據(jù)庫基礎(chǔ)與實踐 第2版 課件 CH01 數(shù)據(jù)庫設(shè)計基礎(chǔ)_第4頁
MySQL數(shù)據(jù)庫基礎(chǔ)與實踐 第2版 課件 CH01 數(shù)據(jù)庫設(shè)計基礎(chǔ)_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

MySQL數(shù)據(jù)庫開發(fā)與應(yīng)用1數(shù)據(jù)庫設(shè)計基礎(chǔ)第章本章內(nèi)容1.1

數(shù)據(jù)庫設(shè)計概述1.2

關(guān)系模型1.3E-R圖1.4MySQL存儲引擎1.5

本章總結(jié)1.6實踐與應(yīng)用1.1數(shù)據(jù)庫設(shè)計概述數(shù)據(jù)庫(DstabaseDB)是“按照某種數(shù)據(jù)結(jié)構(gòu)對數(shù)據(jù)進行組織、存儲和管理的容器”,簡單的說就是用來存儲、管理數(shù)據(jù)的容器。數(shù)據(jù)庫系統(tǒng)(DstabaseSystem,DBS)是指在計算機中引入數(shù)據(jù)庫后的系統(tǒng),一般由數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)、應(yīng)用程序、數(shù)據(jù)庫管理員組成。1.1數(shù)據(jù)庫設(shè)計概述數(shù)據(jù)庫管理系統(tǒng)(DstabaseManagementSystem,DBMS)是一個管理、控制數(shù)據(jù)庫容器中各種數(shù)據(jù)庫對象的系統(tǒng)軟件。

數(shù)據(jù)庫管理系統(tǒng)按照一定的數(shù)據(jù)模型組織數(shù)據(jù),常用的模型包括“層次模型”、“網(wǎng)狀模型”、“關(guān)系模型”,以及“面向?qū)ο竽P汀钡?,基于“關(guān)系模型”的數(shù)據(jù)庫管理系統(tǒng)稱為關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RelationalDatabaseManagementSystem,RDBMS)。

1.1數(shù)據(jù)庫設(shè)計概述關(guān)系數(shù)據(jù)庫概念是由E.F.Codd博士于1976年發(fā)表的《關(guān)于大型共享數(shù)據(jù)庫數(shù)據(jù)的關(guān)系模型》論文中提出,論文中闡述了關(guān)系數(shù)據(jù)庫模型及其原理,并將其用于數(shù)據(jù)庫系統(tǒng)。使用關(guān)系模型對數(shù)據(jù)進行組織、存儲和管理的數(shù)據(jù)庫稱為關(guān)系數(shù)據(jù)庫,關(guān)系數(shù)據(jù)庫系統(tǒng)是支持關(guān)系數(shù)據(jù)模型的數(shù)據(jù)庫系統(tǒng)。在關(guān)系數(shù)據(jù)庫中所謂的“關(guān)系”,實際上是一張二維表,表是邏輯結(jié)構(gòu)而不是物理結(jié)構(gòu),系統(tǒng)在物理層可以使用任何有效的存儲結(jié)構(gòu)來存儲數(shù)據(jù)1.1.2結(jié)構(gòu)化查詢語言SQL結(jié)構(gòu)化查詢語言(StructuredQueryLanage,SQL)是一種專門用來與數(shù)據(jù)庫通信的語言,其利用一些簡單的句子構(gòu)成基本的語法來存取數(shù)據(jù)庫中的內(nèi)容,便于用戶從數(shù)據(jù)庫中獲得及操作所需數(shù)據(jù)。SQL語言具有以下特點:(1)SQL語言是非過程化語言。(2)SQL語言是統(tǒng)一的語言。(3)SQL語言是關(guān)系數(shù)據(jù)庫的公共語言。1.1.2結(jié)構(gòu)化查詢語言SQLSQL語言由四部分組成:(1)數(shù)據(jù)定義語言DDL(DataDefinitionLanguage,DDL)。(2)數(shù)據(jù)操縱語言DML(DataManipulationLauaguage,DML)。(3)數(shù)據(jù)控制語言DCL(DataControlLauguage,DCL)。(4)嵌入式SQL語言的使用規(guī)定。1.1.2結(jié)構(gòu)化查詢語言SQL根據(jù)SQL語言的四部分我們得到SQL的數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操縱,以及數(shù)據(jù)控制的四個基本功能,表1-1列出了實現(xiàn)其功能動詞。表1-1SQL功能及包含的主要動詞SQL功能動詞數(shù)據(jù)定義CREATE、DROP、ALTER數(shù)據(jù)查詢SELECT數(shù)據(jù)操縱INSERT、UPDATE、DELETE數(shù)據(jù)控制GRANT、REVOKE表1-1SQL功能及包含的主要動詞1.1.3數(shù)據(jù)庫設(shè)計基本步驟(1)需求分析階段需求分析是數(shù)據(jù)庫設(shè)計的第一步,也是整個設(shè)計過程的基礎(chǔ),本階段的主要任務(wù)是對現(xiàn)實世界要處理的對象(公司、部門、企業(yè))進行詳細調(diào)查,在了解現(xiàn)行系統(tǒng)的概況、確定新系統(tǒng)功能的過程中,收集支持系統(tǒng)目標的基礎(chǔ)數(shù)據(jù)及其處理方法。1.1.3數(shù)據(jù)庫設(shè)計基本步驟(2)概念結(jié)構(gòu)設(shè)計階段概念結(jié)構(gòu)設(shè)計階段是整個數(shù)據(jù)庫設(shè)計的關(guān)鍵。通過對用戶需求進行綜合、歸納與抽象,形成一個獨立于具體DBMS的概念模型。(3)邏輯結(jié)構(gòu)設(shè)計階段邏輯結(jié)構(gòu)設(shè)計階段將概念結(jié)構(gòu)轉(zhuǎn)換為某個DBMS所支持的數(shù)據(jù)模型,并將其性能進行優(yōu)化。1.1.3數(shù)據(jù)庫設(shè)計基本步驟(4)數(shù)據(jù)庫物理結(jié)構(gòu)設(shè)計階段數(shù)據(jù)庫物理結(jié)構(gòu)設(shè)計階段是利用數(shù)據(jù)庫管理系統(tǒng)提供的方法、技術(shù),對已經(jīng)確定的數(shù)據(jù)庫邏輯結(jié)構(gòu),以較優(yōu)的存儲結(jié)構(gòu)、數(shù)據(jù)存取路徑、合理的數(shù)據(jù)存儲位置以及存儲分配,設(shè)計出一個高效的、可實現(xiàn)的物理數(shù)據(jù)庫結(jié)構(gòu)。

(5)

數(shù)據(jù)庫實施階段

在數(shù)據(jù)庫實施階段運用DBMS提供的數(shù)據(jù)語言(例如,SQL)以及宿主語言(例如,C),根據(jù)邏輯設(shè)計和物理設(shè)計的結(jié)果建立數(shù)據(jù)庫,編制與調(diào)試應(yīng)用程序,組織數(shù)據(jù)入庫,并進行試運行。1.1.3數(shù)據(jù)庫設(shè)計基本步驟(6)數(shù)據(jù)庫運行與維護階段

數(shù)據(jù)庫應(yīng)用系統(tǒng)經(jīng)過試運行后即可投入正式運行,在運行過程中需要不斷對其進行調(diào)整、修改與完善。

1.2關(guān)系模型

關(guān)系模型是目前最重要的也是應(yīng)用最廣泛的數(shù)據(jù)模型。簡言之,關(guān)系就是一張二維表,由行和列組成。關(guān)系模型將數(shù)據(jù)模型組織成表格的形式,這種表格在數(shù)學(xué)上稱為關(guān)系。

1.2.1數(shù)據(jù)庫和表

關(guān)系型數(shù)據(jù)庫是由多個表和其他數(shù)據(jù)庫對象組成的,表是一種最基本的數(shù)據(jù)庫對象,由行和列組成,類似電子表格。一個關(guān)系數(shù)據(jù)庫通常包含多個二維表(稱為數(shù)據(jù)庫表或表),從而實現(xiàn)所設(shè)計的應(yīng)用中各類信息的存儲和維護。在關(guān)系數(shù)據(jù)庫中,如果存在多個表,則表與表之間也會因為字段的關(guān)系產(chǎn)生關(guān)聯(lián),關(guān)聯(lián)性由主鍵、外鍵所體現(xiàn)的參照關(guān)系實現(xiàn)。關(guān)系數(shù)據(jù)庫不僅包含表,還包含其他數(shù)據(jù)庫對象,如,關(guān)系圖、試圖、存儲過程和索引等,所以,通常提到關(guān)系數(shù)據(jù)庫就是指一些相關(guān)的表和其他數(shù)據(jù)庫對象的集合。

1.2.1數(shù)據(jù)庫和表

如表1-2所示的課程表中收集了教師申報課程的相關(guān)信息,包括課程名、課程編號、人數(shù)上限、授課教師、課程性質(zhì)及課程狀態(tài)信息,構(gòu)成一張二維表。

課程名課程編號人數(shù)上限授課教師課程性質(zhì)狀態(tài)C語言程序設(shè)計1620902060孫老師必修未審核MySQL數(shù)據(jù)庫設(shè)計1630962090李老師必修未審核物聯(lián)網(wǎng)導(dǎo)論1630949040王老師選修未審核專業(yè)外語1620910170田老師比修未審核1.2.2列和表數(shù)據(jù)表中的列也稱為字段,用一個列名也稱為字段名標記。除了字段名行,表中每一行都稱為一條記錄。例如表1-2中共有4個字段、4條記錄。如果想查找“MySQL數(shù)據(jù)庫設(shè)計”這門課程的授課教師,則可以查找“MySQL數(shù)據(jù)庫設(shè)計”所在的行與字段“授課教師”所在的列關(guān)聯(lián)相交處獲得。初看上去,關(guān)系數(shù)據(jù)庫中的一個數(shù)據(jù)表與一個不存在“合并單元”的Excel相似,但是同一個數(shù)據(jù)表的字段名不允許重復(fù),而且為了優(yōu)化存儲空間便于數(shù)據(jù)排序,數(shù)據(jù)庫表的每一列要求指定數(shù)據(jù)類型。1.2.3主鍵與外鍵

關(guān)系型數(shù)據(jù)庫中的一個表是由行和列組成的,并且要求表中的每行記錄必須唯一。在設(shè)計表時,可以通過定義主鍵(primarykey)來保證記錄(實體)的唯一性。

一個表的主鍵由一個或多個字段組成,值具有唯一性,且不允許去控制,主鍵的作用是唯一的標識表中的每一條記錄。1.2.3主鍵與外鍵

例如在表1-3中,可以用“學(xué)號”字段作為主鍵,但是不能使用“姓名”字段作為主鍵,因為存在同名現(xiàn)象,無法保證唯一性,有時候表中也有可能沒有一個字段具有唯一性,即沒有任何字段可以作為主鍵,這時候可以考慮使用兩個或兩個以上字段的組合作為主鍵。學(xué)號課程編號成績141800701620902098141800711630962095141800831630949087171800861620910190表1-3主鍵外鍵關(guān)系1.2.4約束

設(shè)計表時,可對表中的一個字段或多個字段的組合設(shè)置約束條件,由數(shù)據(jù)庫管理系統(tǒng)(如MySQL)自動檢測輸入的數(shù)據(jù)是否滿足約束條件,不滿足約束條件的數(shù)據(jù)將被數(shù)據(jù)庫管理系統(tǒng)拒絕錄入。約束分為表級約束和字段級約束,表級約束是對表中幾個字段的約束,字段級約束是對表中一個字段的約束1.2.4約束幾種常見的約束形式如下:(1)主鍵約束主鍵用來保證表中每條記錄的唯一性,因此在設(shè)計數(shù)據(jù)庫表時,建議為所有的數(shù)據(jù)庫表都定義一個主鍵,用于保證數(shù)據(jù)庫表中記錄的唯一性。(2)外鍵約束外鍵約束主要用于定義表與表之間的某種關(guān)系。(3)非空約束如果在一個字段中允許不輸入數(shù)據(jù),可以將該字段定義為null,如果在一個字段中必須輸入數(shù)據(jù),則應(yīng)當(dāng)將該字段定義為notnull。如果設(shè)置某個字段的非空約束,直接在該字段的數(shù)據(jù)類型后面加上“notnull”關(guān)鍵字即可。1.2.4約束(4)唯一性約束如果一個字段值不允許重復(fù),則應(yīng)當(dāng)對該字段添加唯一性(unique)約束。與主鍵約束不同,一張表中可以存在多個唯一性約束,滿足唯一性約束的字段可以取null值。如果設(shè)置某個字段為唯一性約束,直接在該字段的數(shù)據(jù)類型后面加上“unique”關(guān)鍵字即可。(5)默認約束默認值字段用于指定一個字段的默認值,當(dāng)尚未在該字段中輸入數(shù)據(jù)時,該字段中將自動填入這個默認值。(6)檢查約束檢查(check)約束用于檢查字段的輸入值是否滿足指定的條件,在表中輸入或者修改記錄時,如果不符合檢查約束指定的條件,則數(shù)據(jù)不能寫入該字段。1.2.4約束(7)自增約束自增(AUTO_INCREMENT)約束是MySQL唯一擴展的完整性約束,當(dāng)向數(shù)據(jù)庫表中插入新記錄時,字段上的值會自動生成唯一的ID。在具體設(shè)置自增約束時,一個數(shù)據(jù)庫表中只能有一個字段使用該約束,該字段數(shù)據(jù)類型必須是整型類型。由于設(shè)置自增約束后的字段會生成唯一的ID,所以該字段也經(jīng)常會被設(shè)置為主鍵。MySQL中通過SQL語句的AUTO_INCREMENT來實現(xiàn)。(8)刪除約束在MySQL數(shù)據(jù)庫在,一個字段的所有約束都可以用altertable命令刪除。1.3E-R圖

關(guān)系數(shù)據(jù)庫設(shè)計一般要從數(shù)據(jù)模型E-R圖(Entity-RelationshipDiagram,E-R圖)設(shè)計開始。

E-R圖既可以表示現(xiàn)實世界中的事物,又可以表示事物之間的關(guān)系,它描述了軟件系統(tǒng)的數(shù)據(jù)存儲需求,其中E表示實體,R表示關(guān)系,所以E-R圖由實體、屬性和關(guān)系3個要素構(gòu)成,通過一組與實體、屬性和關(guān)系相關(guān)的概念可以很好的描述信息世界。1.3.1實體和屬性

(1)實體E-R圖中的實體表示現(xiàn)實世界具有相同屬性描述的事物的集合,不是某一個具體事物,而是一類事物的統(tǒng)稱。E-R圖中的實體通常使用矩形表示.

在設(shè)計E-R圖時,一個E-R圖中通常包含多個實體,每個實體由實體名唯一標記。開發(fā)數(shù)據(jù)庫時每個實體對應(yīng)于數(shù)據(jù)庫中的一張數(shù)據(jù)庫表,每個實體的具體取值對應(yīng)于數(shù)據(jù)庫表中的一條記錄。例如“選課系統(tǒng)”中,“課程”是一個實體,“課程”實體對應(yīng)于“課程”數(shù)據(jù)庫表,而“課程名”為MySQL數(shù)據(jù)庫設(shè)計,“人數(shù)上限”為90的課程是課程實體的具體取值,對應(yīng)于“課程”數(shù)據(jù)庫表中的一條記錄。1.3.1實體和屬性(2)屬性E-R圖中的屬性通常表示實體的某種特征,也可以使用屬性表示實體間關(guān)系的特征。一個實體通常包含多個屬性,每個屬性由屬性名唯一標記,畫在橢圓內(nèi),E-R圖中的實體的屬性對應(yīng)于數(shù)據(jù)庫表的字段。圖1-2課程實體及屬性圖1-3學(xué)生實體及屬性1.3.2實體與屬性關(guān)系

在現(xiàn)實世界任何事物都不是孤立存在的,事物之間或事物內(nèi)部是有聯(lián)系的。這些聯(lián)系在信息世界反映為實體間的關(guān)系和實體內(nèi)部的關(guān)系。實體內(nèi)部的關(guān)系指的是組成實體的各屬性之間存在的聯(lián)系;實體之間的關(guān)系指的是不同實體之間的聯(lián)系。

E-R圖中的關(guān)系主要是來討論實體間存在的聯(lián)系,在E-R圖中,聯(lián)系用菱形來表示,菱形框內(nèi)寫明聯(lián)系的名稱,并且用連線將聯(lián)系框與它所關(guān)聯(lián)的實體連接起來,并且在連線旁邊標明關(guān)系的類型。1.3.2實體與屬性關(guān)系 E-R圖中實體間的關(guān)系類型一般有三種一對一關(guān)系(1:1)、一對多關(guān)系(1:n)、多對多關(guān)系(m:n)(1) 一對一關(guān)系(1:1)對于實體集A中的每一個實體,實體集B中至多有一個(可以沒有)實體與之聯(lián)系,反之亦然,則實體集A與實體集B具有一對一關(guān)系(1:1)。(2) 一對多關(guān)系(1:n)對于實體集A中的每一個實體,實體集B中有n個實體(n>=0)與之聯(lián)系,而對于實體級B中的每個實體,實體級A中至多只有一個實體與之聯(lián)系,則稱實體集A與實體集B具有一對多關(guān)系。1.3.2實體與屬性關(guān)系(3)多對多關(guān)系(m:n)對于實體集A中每個實體,實體集B中有n個實體(n>=0)與之聯(lián)系,反之,對于實體集B中的每個實體,實體集A中有m個實體(m>=0)與之聯(lián)系,則稱實體A與實體B具有多對多關(guān)系。圖1-4兩個實體之間的關(guān)系類型1.3.2實體與屬性關(guān)系E-R不僅能夠描述兩個實體之間的關(guān)系也可以描述兩個以上實體或者一個實體內(nèi)的關(guān)系。如圖1-5為三個實體之間的關(guān)系,對于供應(yīng)商、項目和零件三個實體,一個供應(yīng)商可以供給多個項目多種零件;一個項目可以使用不同供應(yīng)商的多種零件;一個零件可以由多個供應(yīng)商供給多個項目。圖1-5三個實體間的關(guān)系1.3.2實體與屬性關(guān)系如圖1-6是一個單個實體內(nèi)的關(guān)系,在高等學(xué)校,教師通常是按照學(xué)院或者系進行管理的,每位教師由一個院長或者主任直接領(lǐng)導(dǎo),而院長或系主任領(lǐng)導(dǎo)本院或者本系的多名教師,由于院長或者系主任都是教師中的一員,因此教師實體內(nèi)部存在著領(lǐng)導(dǎo)與被領(lǐng)導(dǎo)的一對多的關(guān)系。圖1-6單個實體內(nèi)的關(guān)系1.3.3E-R圖的設(shè)計原則

數(shù)據(jù)庫設(shè)計通常采用“一事一地”原則,可以從實體與屬性方面體現(xiàn)。(1) 屬性應(yīng)該存在且僅存在于某一個地方(實體或者關(guān)聯(lián))。該原則確保了數(shù)據(jù)庫中的某個數(shù)據(jù)僅存儲于某個數(shù)據(jù)庫表中,避免了同一數(shù)據(jù)存儲于多個數(shù)據(jù)庫表中,避免了數(shù)據(jù)冗余。(2) 實體是一個單獨的個體,不能存在于另一個實體中成為其屬性。該原則確保了一個數(shù)據(jù)庫表中不能包含另一個數(shù)據(jù)庫表,即不能出現(xiàn)“表中套表”的現(xiàn)象。

1.3.3E-R圖的設(shè)計原則

在“選課系統(tǒng)”中,學(xué)生選課時需要提供學(xué)號、姓名、班級名、所屬院校名及聯(lián)系方式等信息。學(xué)號、姓名以及聯(lián)系方式需要作為學(xué)生實體的屬性出現(xiàn),而班級名和院系名則無法作為學(xué)生屬性出現(xiàn)。如果將班級名和院系名也作為學(xué)生實體的屬性,那么學(xué)生實體存在(學(xué)號、姓名、聯(lián)系方式、班級名、院系名)5個屬性,學(xué)生實體中出現(xiàn)了“表中套表”的現(xiàn)象,違背了“一事一地”原則。應(yīng)該將“班級名”屬性與“院系名”屬性抽取出來,放入“班級”實體中,將一個“大”的“實體”分解中兩個“小”的實體,并且建立班級實體與學(xué)生實體之間的一對多關(guān)系.1.3.3E-R圖的設(shè)計原則(3) 同一個實體在同一個E-R圖僅出現(xiàn)一次。當(dāng)同一個E-R圖中兩個實體間存在多種關(guān)系時,為了表示實體間的多種關(guān)系,建立不要讓同一個實體出現(xiàn)多次。

1.3.3E-R圖的設(shè)計原則

本著“一事一地”原則對“選課系統(tǒng)”進行設(shè)計,得到所有的“部分”E-R圖,并將其合并成為“選課系統(tǒng)”E-R圖如圖1-9所示,其中共有實體4個分別為教師、課程、學(xué)生和班級,每個實體包含的屬性實體間的關(guān)系如E-R圖所示。1.4MySQL存儲引擎

MySQL數(shù)據(jù)庫中典型的數(shù)據(jù)庫對象包括表、視圖、索引、存儲過程、函數(shù)、觸發(fā)器等,表是其中最為重要的數(shù)據(jù)庫對象。使用SQL語句“createtable表名”即可創(chuàng)建一個數(shù)據(jù)庫表,在創(chuàng)建數(shù)據(jù)庫表之前,必須首先明確該表的存儲引擎。1.4MySQL存儲引擎

存儲引擎實際上是如何存儲數(shù)據(jù)、如何為存儲的數(shù)據(jù)建立索引和如何更新、查詢數(shù)據(jù)。在關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)以表的形式存儲,所以存儲引擎也可以稱為表類型。MySQL中的數(shù)據(jù)用各種不同的技術(shù)存儲在文件(或者內(nèi)存)中。這些技術(shù)中的每一種技術(shù)都使用不同的存儲機制、索引技巧、鎖定水平并且最終提供廣泛的不同的功能和能力。通過選擇不同的技術(shù),數(shù)據(jù)庫開發(fā)人員可以獲得額外的速度或者功能,從而改善所設(shè)計應(yīng)用的整體功能。1.4MySQL存儲引擎 MySQL默認配置了許多不同的存儲引擎,可以預(yù)先設(shè)置或者在MySQL服務(wù)器中啟用。開發(fā)人員可以根據(jù)需要選擇適用于服務(wù)器、數(shù)據(jù)庫和表格的存儲引擎,以便在選擇如何存儲信息、如何檢索這些信息以及需要數(shù)據(jù)結(jié)合什么性能和功能的時候為設(shè)計提供最大的靈活性。與其他數(shù)據(jù)庫管理系統(tǒng)不同,MySQL提供了插件式(pluggable)的存儲引擎,存儲引擎是基于表的。同一個數(shù)據(jù)庫,不同的表,存儲引擎可以不同;同一個數(shù)據(jù)庫表在不同的場合可以應(yīng)用于不同的存儲引擎。1.4.1InnoDB存儲引擎

與其他存儲引擎相比,InnoDB存儲引擎是事務(wù)(Transaction)安全的,并且支持外鍵。如果某張表主要提供聯(lián)機事務(wù)處理(OLTP)支持,需要執(zhí)行大量的增、刪、改操作(即insert、delete、update語句),處于事務(wù)安全方面考慮,InnoDB存儲引擎是較好的選擇。

對于支持事務(wù)的InnoDB表,影響速度的主要原因是打開了自動提交(autocommit)選項,或者程序沒有顯示調(diào)用“begintrasaction;”(開始事務(wù))和“commit;”(提交事務(wù)),導(dǎo)致每條insert、delete或者update語句都自動開始事務(wù)和提交事務(wù),嚴重影響了更新語句(insert、delete、update語句)的執(zhí)行效率。讓多條更新語句形成一個事務(wù),可以大大提高更新操作的性能。從MySQL5.6版本開始,InnoDB存儲引擎的表已經(jīng)支持全文索引,這大幅提升了InnoDB存儲引擎的檢索能力。1.4.1InnoDB存儲引擎

對于InnoDB存儲引擎的數(shù)據(jù)庫表而言,存在表空間的概念,InnoDB表空間分享表空間與獨享表空間。(1)共享表空間MySQL服務(wù)實例承載的所有數(shù)據(jù)庫的所有InnoDB表的數(shù)據(jù)信息、索引信息、各種元數(shù)據(jù)信息,以及事務(wù)的回滾(UNDO)信息,全部存放在共享表空間文件中。(2)獨享表空間如果將全局系統(tǒng)變量innodb_file_per_table的值設(shè)為ON(innodb_file_per_table的默認值為OFF),則之后再創(chuàng)建InnoDB存儲引擎的新表時,這些表的數(shù)據(jù)信息、索引信息將保存到獨享表空間文件中。1.4.2MyISAM存儲引擎

MyISAM存儲引擎是基于傳統(tǒng)的ISAM(IndexedSequentialAccessMethod有索引的順序訪問方法)類型,它是存儲記錄和文件的標注方法。與其他存儲引擎相比,MyISAM具有檢查和修復(fù)表格的大多數(shù)工具。

MyISAM表格可以被壓縮,且支持全文搜索。但它們不是事務(wù)安全,且不支持外鍵。如果事物回滾將造成不完全回滾,不具有原子性。如果執(zhí)行大量的查詢操作時,MyISAM是較好的選擇。1.4.2MyISAM存儲引擎

MyISAM存儲引擎是基于傳統(tǒng)的ISAM(IndexedSequentialAccessMethod有索引的順序訪問方法)類型,它是存儲記錄和文件的標注方法。與其他存儲引擎相比,MyISAM具有檢查和修復(fù)表格的大多數(shù)工具。

MyISAM表格可以被壓縮,且支持全文搜索。但它們不是事務(wù)安全,且不支持外鍵。如果事物回滾將造成不完全回滾,不具有原子性。如果執(zhí)行大量的查詢操作時,MyISAM是較好的選擇。1.4.3存儲引擎的選擇

選擇存儲引擎時,應(yīng)根據(jù)應(yīng)用特點選擇合適的存儲引擎。對于復(fù)雜的應(yīng)用系統(tǒng),還可以根據(jù)實際情況選擇多種存儲引擎進行結(jié)合。當(dāng)不需要事務(wù)支持、并發(fā)相對較低、數(shù)據(jù)修改相對較少、以讀為主、數(shù)據(jù)一致性要求不高的場合適合選用MyISAM存儲引擎。當(dāng)需要事務(wù)支持、行級鎖定對高并發(fā)有很好的適應(yīng)能力,但需要確保查詢是通過索引完成,數(shù)據(jù)更新較為頻繁的場合,適合選用InnoDB存儲引擎。1.4.3存儲引擎的選擇

在采用InnoDB存儲引擎時需要注意:主鍵盡量小,避免給Secondaryindex帶來過大的空間負擔(dān),避免全表掃描,因為使用表鎖,可可能緩存所有的索引和數(shù)據(jù),提供響應(yīng)速度,在大批量小插入時合理設(shè)置innodb_flush_log_at_trx_commit參數(shù)值,盡量自

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論