




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rè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汀钡龋凇瓣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)目標(biāo)的基礎(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ù)表中的列也稱為字段,用一個列名也稱為字段名標(biāo)記。除了字段名行,表中每一行都稱為一條記錄。例如表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)來保證記錄(實體)的唯一性。
一個表的主鍵由一個或多個字段組成,值具有唯一性,且不允許去控制,主鍵的作用是唯一的標(biāo)識表中的每一條記錄。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)默認(rèn)約束默認(rèn)值字段用于指定一個字段的默認(rèn)值,當(dāng)尚未在該字段中輸入數(shù)據(jù)時,該字段中將自動填入這個默認(rèn)值。(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圖中通常包含多個實體,每個實體由實體名唯一標(biāo)記。開發(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)系的特征。一個實體通常包含多個屬性,每個屬性由屬性名唯一標(biāo)記,畫在橢圓內(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)的實體連接起來,并且在連線旁邊標(biāo)明關(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默認(rèn)配置了許多不同的存儲引擎,可以預(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ù),嚴(yán)重影響了更新語句(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的默認(rèn)值為OFF),則之后再創(chuàng)建InnoDB存儲引擎的新表時,這些表的數(shù)據(jù)信息、索引信息將保存到獨享表空間文件中。1.4.2MyISAM存儲引擎 MyISAM存儲引擎是基于傳統(tǒng)的ISAM(IndexedSequentialAccessMethod有索引的順序訪問方法)類型,它是存儲記錄和文件的標(biāo)注方法。與其他存儲引擎相比,MyISAM具有檢查和修復(fù)表格的大多數(shù)工具。MyISAM表格可以被壓縮,且支持全文搜索。但它們不是事務(wù)安全,且不支持外鍵。如果事物回滾將造成不完全回滾,不具有原子性。如果執(zhí)行大量的查詢操作時,MyISAM是較好的選擇。1.4.2MyISAM存儲引擎 MyISAM存儲引擎是基于傳統(tǒng)的ISAM(IndexedSequentialAccessMethod有索引的順序訪問方法)類型,它是存儲記錄和文件的標(biāo)注方法。與其他存儲引擎相比,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帶來過大的空間負(fù)擔(dān),避免全表掃描,因為使用表鎖,可可能緩存所有的索引和數(shù)據(jù),提供響應(yīng)速度,在大批量小插入時合理設(shè)置innodb_flush_log_at_trx_commit參數(shù)值,盡量自己控制事務(wù)而不用使用autocommit自動提交,不用過度追求安全性,避免主鍵更新,因為這會帶來大量數(shù)據(jù)移動。1.5本章總結(jié)
本章首先介紹了數(shù)據(jù)庫設(shè)計的基本概念,簡述了關(guān)系數(shù)據(jù)庫、結(jié)構(gòu)化查詢語言SQL的組成與特點,并進一步闡述了數(shù)據(jù)庫設(shè)計的基本步驟及注意事項。接著對關(guān)系模型進行介紹,描述了數(shù)據(jù)庫和表、列和行以及主要約束。在E-R圖內(nèi)容闡述中,介紹了實體、屬性以及關(guān)系,并給出了E-R圖的設(shè)計原則與方法。最后介紹了MySQL存儲引擎,主要以兩種使用比較廣泛的存儲引擎為例進行介紹,為后續(xù)章節(jié)的學(xué)習(xí)打好基礎(chǔ)。1.6實踐與練習(xí)1選擇題數(shù)據(jù)庫系統(tǒng)的核心是()。A.?dāng)?shù)據(jù)模型B.數(shù)據(jù)庫管理系統(tǒng)C.數(shù)據(jù)庫D.數(shù)據(jù)庫管理員(2)E-R圖中提供了表示信息世界中實體、屬性和()的方法。
A.數(shù)據(jù)
B.關(guān)系
C.表
D.模式(3)E-R圖是數(shù)據(jù)庫設(shè)計的工具之一,它一般適用于建立數(shù)據(jù)庫的()。
A.概念模型 B.結(jié)構(gòu)模型 C.物理模型 D.邏輯模型1.6實踐與練習(xí)1選擇題(4)SQL語言又稱()。
A.結(jié)構(gòu)化定義語言 B.結(jié)構(gòu)化控制語言C.結(jié)構(gòu)化查詢語言 D.結(jié)構(gòu)化操縱語言(5)可用于從表中檢索數(shù)據(jù)的SQL語句是()。
A.SELECT語句 B.INSETR語句 C.UPDATE語句 D.DELETE語句2概念題1)簡述什么是數(shù)據(jù)庫、數(shù)據(jù)庫系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)?2)簡述什么是關(guān)系型數(shù)據(jù)庫?3)簡述SQL功能及包含的主要動詞?4)數(shù)據(jù)庫設(shè)計包含哪的幾個階段,請分別簡要闡述?5)什么是E-R圖中的實體和屬性,以及它們的表示方法?1.6實踐與練習(xí)3.操作題現(xiàn)有班級信息管理系統(tǒng)需要設(shè)計,希望數(shù)據(jù)庫能夠管理班級與學(xué)生信息,其中學(xué)生信息包括學(xué)號、姓名、年齡、性別、班級名;班級信息包括班級名、班主任、班級人數(shù)。(1) 確定班級實體和學(xué)生實體的屬性。(2) 確定班級和學(xué)生之間的關(guān)系,給關(guān)系命名并指出關(guān)系的類型。(3) 確定關(guān)系本身的屬性。(4) 畫出班級與學(xué)生關(guān)系的E-R圖。MySQL數(shù)據(jù)庫基礎(chǔ)與實踐2MySQL數(shù)據(jù)庫概述第章本章內(nèi)容2.1MySQL數(shù)據(jù)庫概述2.2MySQL數(shù)據(jù)庫安裝和配置2.3MySQL庫的基本操作2.4MySQL表結(jié)構(gòu)的操作2.5案例:網(wǎng)上書店系統(tǒng)2.1MySQL數(shù)據(jù)庫概述MySQL是采用客戶端/服務(wù)器的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),具有跨平臺性和可移植性,體積小、運行速度快、成本低,可運行在多種操作系統(tǒng)上。2.1.1MySQL簡介MySQL8.x新功能和新特性1.字符集支持MySQL8.x將默認(rèn)字符集從latinl更改為utf8mb4,并將utf8mb4_0900_ai_ci作為默認(rèn)排序規(guī)則。utf8mb4編碼是utf8編碼的超集,utf8最多只能存3字節(jié)長度的字符,utfmb4每個字符占4字節(jié)。2.InnoDB存儲引擎性能增強InnoDB是MySQL默認(rèn)的存儲引擎,支持?jǐn)?shù)據(jù)庫的事務(wù)處理、數(shù)據(jù)表的外鍵等功能。MySQL8.x對InnoDB的性能進行了大幅優(yōu)化,在事務(wù)支持、讀寫工作負(fù)載等方面有著明顯的提升。3.索引優(yōu)化MySQL8.x中新增了隱藏索引和降序索引。隱藏索引的特性對于性能調(diào)試非常有用。當(dāng)隱藏一個索引時,觀察其對數(shù)據(jù)庫的影響。如果數(shù)據(jù)庫性能有所下降,就說明這個索引是有用的;如果數(shù)據(jù)庫性能沒有變化,則說明這個索引是無用的。支持降序索引,提高了特定場景的查詢性能。降序索引只支持InnoDB
存儲引擎。2.1.1MySQL簡介4.自增變量的持久化在MySQL8.x之前,自增主鍵AUTO_INCREMENT的值如果大于max(primarykey)+1,在MySQL重啟后,會重置AUTO_INCREMENT=max(primarykey)+1,這種現(xiàn)象在某些情況下會導(dǎo)致業(yè)務(wù)主鍵沖突或者其他難以發(fā)現(xiàn)的問題。自MySQL8.x開始,已經(jīng)將自增變量持久化了,并不會由于數(shù)據(jù)庫的重啟而重置該值。5.窗口函數(shù)MySQL8.x新增了窗口函數(shù),可以實現(xiàn)若干新的查詢方式。窗口可以理解為記錄集合,窗口函數(shù)也就是在滿足某種條件的記錄集合上執(zhí)行的特殊函數(shù)。窗口函數(shù)可以用來處理復(fù)雜的報表統(tǒng)計分析場景,例如計算移動平均值、累計和、排名等。2.1.2MySQL體系結(jié)構(gòu)MySQL的組成部分包括:連接池組件、系統(tǒng)管理和控制工具組件、SQL接口組件、解析器組件、優(yōu)化器組件、緩存組件、插件式存儲引擎及物理文件。圖2-1MySQL體系結(jié)構(gòu)2.1.2MySQL體系結(jié)構(gòu)2.2MySQL數(shù)據(jù)庫安裝和配置官方網(wǎng)址為/downloads/。以Windows操作系統(tǒng)為開發(fā)平臺,采用的是MySql8.2.0版本。2.2.1MySQL安裝和配置服務(wù)(1)雙擊mysql-8.2.0-winx64.msi文件,在彈出的安裝向?qū)υ捒蛑校瑔螕簟癗ext”按鈕。2.2.1MySQL安裝和配置服務(wù)(2)進入選擇“安裝類型”的對話框,選擇“Custom”選項,單擊“Next”按鈕。2.2.1MySQL安裝和配置服務(wù)在打開的自定義安裝對話框中選擇合適的安裝組件,單擊“Browse”按鈕,將安裝路徑更改為D:\ProgramFiles\MySQL\MySQLServer8.2\,單擊“Next”按鈕。2.2.1MySQL安裝和配置服務(wù)(3)進入準(zhǔn)備安裝程序?qū)υ捒?,單擊“Install”按鈕,開始安裝。2.2.1MySQL安裝和配置服務(wù)(4)安裝完成后,出現(xiàn)安裝完成對話框,選中復(fù)選框“RunMySQLConfigurator”,配置MySQL服務(wù)器,單擊“Finish”按鈕。2.2.1MySQL安裝和配置服務(wù)(5)進入MySQL服務(wù)器實例配置向?qū)υ捒颉?.2.1MySQL安裝和配置服務(wù)(6)單擊“Next”按鈕,打開類型與網(wǎng)絡(luò)對話框,如圖2-9所示。在“ConfigType”下拉菜單中選擇服務(wù)器配置類型。選擇默認(rèn)的“DevelopmentComputer”即可,其他配置保持默認(rèn),注意默認(rèn)端口號為3306,單擊“Next”按鈕。2.2.1MySQL安裝和配置服務(wù)(7)打開賬號與角色對話框,如圖2-10所示。設(shè)置MySQL的超級用戶root的密碼,分別在MySQLRootPassword和RepeatPassword兩個文本框中輸入密碼和確認(rèn)密碼(記住此密碼),單擊“Next”按鈕。2.2.1MySQL安裝和配置服務(wù)(8)打開Windows服務(wù)對話框,如圖2-11所示。將MySQL服務(wù)器實例配置為一個Windows服務(wù),同時設(shè)置是否開機自動啟動。保持默認(rèn)值即可,單擊“Next”按鈕。2.2.1MySQL安裝和配置服務(wù)(9)打開服務(wù)器文件權(quán)限對話框,如圖2-12所示。保持默認(rèn)值即可,單擊“Next”按鈕。2.2.1MySQL安裝和配置服務(wù)(10)打開示例數(shù)據(jù)庫對話框,如圖2-13所示。若不安裝示例數(shù)據(jù)庫,保持默認(rèn)設(shè)置即可,單擊“Next”按鈕。2.2.1MySQL安裝和配置服務(wù)(11)打開應(yīng)用配置對話框,如圖2-14所示。單擊“Execute”按鈕,開始執(zhí)行配置過程。配置完成后,界面如圖2-15所示,單擊“Next”按鈕。2.2.1MySQL安裝和配置服務(wù)(12)打開安裝完成對話框,如圖2-16所示。單擊“Finish”按鈕,完成全部安裝與配置工作。2.2.2啟動和停止服務(wù)1.通過圖形化界面啟動和停止MySQL服務(wù)按“Win+R”組合鍵打開“運行”對話框,在“打開”文本框中輸入“services.msc”命令,單擊“確定”按鈕,即可打開“服務(wù)”窗口。找到“MySQL82”服務(wù),即可完成相應(yīng)功能。2.2.2啟動和停止服務(wù)2.通過DOS命令啟動和停止MySQL服務(wù)打開“開始”菜單,在“搜索”框中輸入“cmd”命令,選擇以管理員身份運行“命令提示符”應(yīng)用,進入DOS命令窗口。在命令提示符后輸入“netstartMySQL82”命令或“netstopMySQL82”命令,按下<Enter>鍵,即可實現(xiàn)MySQL服務(wù)的啟動與停止2.2.3MySQL加入環(huán)境變量若沒有將MySQL服務(wù)的bin目錄添加到環(huán)境變量PATH中,在這種情況下進入DOS命令窗口。在命令提示符后輸入“mysql-uroot-p”命令,按下<Enter>鍵,系統(tǒng)將會輸出如下出錯信息,表明系統(tǒng)找不到相應(yīng)的mysql程序。2.2.3MySQL加入環(huán)境變量可以通過設(shè)置環(huán)境變量PATH來解決這個問題(1)右擊桌面上“此電腦”圖標(biāo),選擇“屬性”菜單項。在彈出的“系統(tǒng)”對話框中,選擇“高級系統(tǒng)設(shè)置”選擇卡。在彈出的“系統(tǒng)屬性”對話框中,選擇“高級”選項卡,然后單擊“環(huán)境變量”按鈕,將彈出“環(huán)境變量”對話框。2.2.3MySQL加入環(huán)境變量(2)在系統(tǒng)變量列表中查看是否存在PATH變量(注意:不區(qū)分大小寫)。如果不存在,則新建系統(tǒng)變量PATH,若存在,則選中該變量,單擊“編輯”按鈕,打開“編輯系統(tǒng)變量”對話框。在“變量值”文本框中原有變量值的后面增加MySQL安裝目錄下bin目錄的路徑,本書中對應(yīng)的路徑是“D:\ProgramFiles\MySQL\MySQLServer8.2\bin;”。單擊“確定”按鈕,完成系統(tǒng)變量PATH的編輯。2.2.3MySQL加入環(huán)境變量重新打開一個新的DOS命令窗口,在命令提示符后輸入“mysql-uroot-p”命令,按下<Enter>鍵,如果系統(tǒng)運行結(jié)果如下圖所示,則表明環(huán)境變量PATH配置成功。2.2.4連接MySQL服務(wù)器連接MySQL服務(wù)器的命令格式如下:mysql-h服務(wù)器主機名-u用戶名-p各選項的含義如下:-h:指定所要連接的MySQL服務(wù)器主機。如果MySQL服務(wù)器與執(zhí)行mysql命令的機器是同一臺主機時,主機名可以使用localhost或使用IP地址,也可以省略此選項。-u:指定連接MySQL服務(wù)器使用的用戶名,如root為管理員用戶,具有所有權(quán)限。-p:指定連接MySQL服務(wù)器使用的密碼,在該參數(shù)后直接回車,然后以密文的形式輸入密碼。2.2.4連接MySQL服務(wù)器假設(shè)連接MySQL服務(wù)器的用戶名和密碼分別是root和123456,如果本機既是客戶機又是服務(wù)器,則可以使用下面命令來連接MySQL服務(wù)器:mysql-uroot-p輸入完上述命令之后,回車,會顯示要求輸入密碼的提示“Enterpassword:”,輸入“root”后回車。如果成功連接MySQL服務(wù)器,則會顯示出歡迎信息及“mysql>”提示符,等待用戶輸入MySQL命令或者SQL語句。2.2.4連接MySQL服務(wù)器在連接到MySQL服務(wù)器后,可以隨時輸入quit、exit或\q命令來終止會話。2.2.4連接MySQL服務(wù)器另外一種進入MySQL控制臺的方法:單擊“開始”,選擇“MySQL→MySQLServer8.2→MySQLCommandLineClient”,會出現(xiàn)控制臺窗口,直接輸入密碼回車,即可連接MySQL服務(wù)器。2.2.5MySQL可視化操作工具比較常用的有Navicat、MySQLWorkbench及SQLyog等。本節(jié)介紹Navicat的使用方法。2.2.5MySQL可視化操作工具進入操作界面后,單擊工具欄上的“連接”按鈕,將會打開設(shè)置連接屬性的對話框,定義一個連接名稱并輸入正確的連接信息,單擊“連接測試”按鈕測試連接是否成功,然后單擊“確定”按鈕。2.2.5MySQL可視化操作工具以創(chuàng)建一個學(xué)生管理系統(tǒng)的數(shù)據(jù)庫為例,創(chuàng)建數(shù)據(jù)庫及表的過程如下:(1)創(chuàng)建數(shù)據(jù)庫右擊“MYSQL”連接,選擇“新建數(shù)據(jù)庫”選項,在打開的創(chuàng)建數(shù)據(jù)庫對話框中輸入數(shù)據(jù)庫名稱school,設(shè)置字符集為utf8mb4,然后單擊“確定”按鈕,完成數(shù)據(jù)庫school的創(chuàng)建。2.2.5MySQL可視化操作工具(2)創(chuàng)建數(shù)據(jù)表雙擊school數(shù)據(jù)庫圖標(biāo)或者右擊school圖標(biāo),選擇“打開數(shù)據(jù)庫”選項,打開數(shù)據(jù)庫,即設(shè)置school數(shù)據(jù)庫為當(dāng)前數(shù)據(jù)庫。創(chuàng)建students表,右擊“表”圖標(biāo),選擇“新建表”選項,在右側(cè)窗口中設(shè)計表的結(jié)構(gòu),然后單擊工具欄上的“保存”按鈕,將表名保存為students。2.2.5MySQL可視化操作工具在左側(cè)導(dǎo)航窗口中,雙擊students數(shù)據(jù)表圖標(biāo)或者右擊students圖標(biāo),選擇“打開表”選項,打開數(shù)據(jù)表,然后向表中添加記錄。由于ID字段設(shè)置了自動增量屬性,ID字段的值可由系統(tǒng)自動填充,用戶無需填寫。2.2.5MySQL可視化操作工具若要以SQL語句的形式對數(shù)據(jù)庫及表進行操作,可單擊工具欄上的“查詢”按鈕,然后再單擊“新建查詢”按鈕,即可在QueryEditor欄中輸入SQL語句,如輸入select*fromstudents,然后單擊工具欄上的“允許”按鈕,即可執(zhí)行SQL語句。2.3MySQL庫的基本操作本節(jié)以一個簡單的網(wǎng)上書店的數(shù)據(jù)庫管理為例,介紹數(shù)據(jù)庫和表的創(chuàng)建以及對數(shù)據(jù)庫和表的各種操作。2.3.1創(chuàng)建數(shù)據(jù)庫創(chuàng)建新的數(shù)據(jù)庫之前,要先連接到MySQL服務(wù)器。創(chuàng)建數(shù)據(jù)庫命令如下:CREATEDATABASE[IFNOTEXISTS]<數(shù)據(jù)庫名>[[DEFAULT]CHARACTERSET<字符集名>][[DEFAULT]COLLATE<校對規(guī)則名>];例如,創(chuàng)建網(wǎng)上書店的數(shù)據(jù)庫bookstore,可在控制臺中輸入如下語句:createdatabasebookstore;如果數(shù)據(jù)庫創(chuàng)建成功,將會出現(xiàn)“QueryOK,1rowaffected”的提示信息。2.3.1創(chuàng)建數(shù)據(jù)庫修改數(shù)據(jù)庫字符集的MySQL命令如下:ALTER{DATABASE|SCHEMA}<數(shù)據(jù)庫名>[[DEFAULT]CHARACTERSET<字符集名>|[DEFAULT]COLLATE<校對規(guī)則名>]例如,修改數(shù)據(jù)庫bookstore的默認(rèn)字符集為“utf8mb4”,以管理員身份運行“命令提示符”應(yīng)用,在控制臺中輸入如下語句:alterdatabasebookstorecharactersetutf8mb4;2.3.2查看數(shù)據(jù)庫查看當(dāng)前MySQL服務(wù)器上的數(shù)據(jù)庫列表的命令如下:showdatabases;2.3.3顯示數(shù)據(jù)庫查看數(shù)據(jù)庫的相關(guān)信息,如默認(rèn)字符集等,命令如下:showcreatedatabasebookstore;2.3.4選擇當(dāng)前庫使用SQL語句USE即可指定當(dāng)前數(shù)據(jù)庫,如要選擇bookstore為當(dāng)前數(shù)據(jù)庫,可使用如下命令:usebookstore;如果選擇數(shù)據(jù)庫成功,將會出現(xiàn)“Databasechanged”的提示信息,以后在控制臺中輸入的MySQL命令及SQL語句都將默認(rèn)操作bookstore數(shù)據(jù)庫中的數(shù)據(jù)庫對象。2.3.5刪除數(shù)據(jù)庫如果要刪除一個指定的數(shù)據(jù)庫,如bookstore數(shù)據(jù)庫,可在控制臺中使用下面的SQL語句:dropdatabasebookstore;如果數(shù)據(jù)庫刪除成功,將會出現(xiàn)“QueryOK,0rowsaffected”的提示信息。2.4MySQL表結(jié)構(gòu)的操作本節(jié)將介紹如何創(chuàng)建、查看、修改和刪除MySQL數(shù)據(jù)庫表。2.4.1創(chuàng)建數(shù)據(jù)表關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)是以二維表的形式存放的。每一行代表一條記錄,每一列代表一個字段。創(chuàng)建數(shù)據(jù)表主要是定義數(shù)據(jù)表的結(jié)構(gòu),包括數(shù)據(jù)表的名稱、字段名、字段類型、屬性、約束及索引等。2.4.1創(chuàng)建數(shù)據(jù)表使用CREATETABLE語句創(chuàng)建表的基本語法格式如下:CREATETABLE[IFNOTEXISTS]表名(字段名1數(shù)據(jù)類型[約束]][,字段名2數(shù)據(jù)類型[約束]] ……[,字段名n數(shù)據(jù)類型[約束]][其他約束條件])[其他選項];2.4.1創(chuàng)建數(shù)據(jù)表例如,在bookstore數(shù)據(jù)庫中創(chuàng)建一個名為users的用戶表,代碼如下:usebookstorecreatetableusers( uidintnotnullprimarykeyauto_increment, namevarchar(20)notnullunique, pwdvarchar(20)notnull, sexchar(2));2.4.1創(chuàng)建數(shù)據(jù)表使用SHOWTABLES命令來查看當(dāng)前數(shù)據(jù)庫中可用的表:showtables;2.4.1創(chuàng)建數(shù)據(jù)表定義字段時常用的關(guān)鍵字:1.AUTO_INCREMENT該屬性用于設(shè)置整數(shù)類型字段的自動增量屬性。當(dāng)數(shù)值類型的字段設(shè)置為自動增量時,每增加一條新記錄,該字段的值就會自動加1,而且此字段的值不允許重復(fù)。AUTO_INCREMENT字段必須被索引,而且必須為NOTNULL。每個表最多只能有一個字段具有AUTO_INCREMENT屬性。2.4.1創(chuàng)建數(shù)據(jù)表2.DEFAULTDEFAULT屬性是指表中添加新行時給表中某一字段指定的默認(rèn)值。使用DEFAULT定義,一是可以避免NOTNULL值的數(shù)據(jù)錯誤;二是可以加快用戶的輸入速度。如設(shè)置users表中sex字段的默認(rèn)值為F,在創(chuàng)建users表時可使用如下語句:sexenum(‘F’,’M’)default‘F’2.4.1創(chuàng)建數(shù)據(jù)表3.NOTNULL指定NOTNULL屬性的字段,不能有NULL值。當(dāng)添加或修改數(shù)據(jù)時,設(shè)置了NOTNULL屬性的字段值不允許為空,必須存在具體的值。4.UNSIGNED表示該值不能為負(fù)數(shù)。2.4.1創(chuàng)建數(shù)據(jù)表5.PRIMARYKEY表中唯一標(biāo)識每一行的字段(可以是多個字段)可以定義為表的主鍵(PRIMARYKEY)。定義PRIMARYKEY時,該字段的空值屬性必須定義為NOTNULL。一個表中只能有一個PRIMARYKEY。有兩種創(chuàng)建主鍵的方法(同樣適用于UNIQUE),下面兩條CREATETABLE語句是等價的:createtabletest(uidintnotnullprimarykey);createtabletest(
uid
intnotnull,primarykey(uid));2.4.1創(chuàng)建數(shù)據(jù)表6.UNIQUEUNIQUE唯一索引通過在列中不輸入重復(fù)值來保證一個字段或多個字段的數(shù)據(jù)完整性。與PRIMARYKEY不同的是,每個表可以創(chuàng)建多個UNIQUE列。7.FOREIGNKEYFOREIGNKEY定義了表之間的關(guān)系,主要用來維護兩個表之間的數(shù)據(jù)一致性關(guān)系,是關(guān)系數(shù)據(jù)庫中增強表與表之間參照完整性的主要機制。定義FOREIGNKEY約束時,要求在主鍵表中定義了PRIMARYKEY約束或UNIQUE約束。只有InnoDB存儲引擎提供外鍵支持機制。2.4.1創(chuàng)建數(shù)據(jù)表在子表里定義外鍵的語法格式如下:[CONSTRAINT約束名]FOREIGNKEY(字段名)REFERENCES父表名(字段名)[ONDELETE級聯(lián)選項][ONUPDATE級聯(lián)選項]2.4.1創(chuàng)建數(shù)據(jù)表例如,為訂單表orders中的uid列創(chuàng)建外鍵約束,主鍵表(父表)為用戶表users,創(chuàng)建訂單表的代碼如下:createtableorders(oidintnotnullprimarykey,uidintnotnull,statusintnotnull,totalpricefloatnotnull,constraintfk_orders_usersforeignkey(uid)referencesusers(uid)ondeletecascadeonupdatecascade);2.4.2查看數(shù)據(jù)庫表結(jié)構(gòu)使用DESCRIBE語句來查看數(shù)據(jù)表結(jié)構(gòu),代碼如下:describeusers;也可以使用如下代碼:showcolumnsfromusers;2.4.3修改表結(jié)構(gòu)修改表的語法格式如下:ALTERTABLE表名ACTION[,ACTION]…;其中,每個動作(ACTION)指的是對表所做的修改,MySQL支持一條ALTERTABLE語句帶多個動作,以逗號分隔。2.4.3修改表結(jié)構(gòu)1.修改字段(1)添加新字段ALTERTABLE表名ADD新字段名數(shù)據(jù)類型[約束條件][FIRST|AFTER字段名];例如,為用戶表users添加一個address字段,數(shù)據(jù)類型為varchar(50),非空約束,可以使用下面的SQL語句:altertableusersaddaddressvarchar(50)notnull;若要在users表中sex字段后增加一個phone字段,數(shù)據(jù)類型為varchar(20),非空約束,則對應(yīng)的SQL語句如下:altertableusersaddphonevarchar(20)notnullaftersex;2.4.3修改表結(jié)構(gòu)(2)修改字段如果只需要修改字段的數(shù)據(jù)類型,則使用CHANGE或MODIFY子句都可以,其語法格式如下:ALTERTABLE表名CHANGE原字段名新字段名數(shù)據(jù)類型;ALTERTABLE表名MODIFY字段名數(shù)據(jù)類型;例如,要修改users表中的phone字段,將數(shù)據(jù)類型由varchar(20)改為int,并設(shè)置默認(rèn)值為0,下面兩條語句是等效的。altertableuserschangephonephoneintunsigneddefault0;altertableusersmodifyphoneintunsigneddefault0;2.4.3修改表結(jié)構(gòu)如果需要修改字段的字段名(及數(shù)據(jù)類型),這時就只能使用CHANGE子句了。例如,將users表中的phone字段修改為telephone字段,且數(shù)據(jù)類型修改為varchar(20),則可以使用下面的SQL語句:altertableuserschangephonetelephonevarchar(20);2.4.3修改表結(jié)構(gòu)(3)刪除字段刪除表字段的語法格式如下所示:ALTERTABLE表名DROP字段名;例如,將users表的address字段刪除,則可以使用如下SQL語句:altertableusersdropaddress;2.4.3修改表結(jié)構(gòu)2.修改約束條件(1)添加約束條件ALTERTABLE表名ADDCONSTRAINT約束名約束類型(字段名);例如,向用戶表users的telephone字段添加唯一性約束,且約束名為phone_unique,可以使用下面的SQL語句:altertableusersaddconstraintphone_uniqueunique(telephone);2.4.3修改表結(jié)構(gòu)如果要向訂單表orders的uid字段添加外鍵約束,且約束名為fk_orders_users,可以使用下面的SQL語句:altertableusersaddconstraintfk_orders_usersforeignkey(uid)referencesusers(uid);2.4.3修改表結(jié)構(gòu)(2)刪除約束條件若要刪除表的主鍵約束,其語法格式如下:ALTERTABLE表名DROPPRIMARYKEY;例如,要刪除訂單表orders的主鍵約束,可以使用如下代碼:altertableordersdropprimarykey;2.4.3修改表結(jié)構(gòu)若要刪除表的外鍵約束,其語法格式如下:ALTERTABLE表名DROPFOREIGNKEY外鍵約束名;例如,要刪除訂單表orders的外鍵約束,可以使用如下代碼:altertableordersdropforeignkeyfk_orders_users;2.4.3修改表結(jié)構(gòu)若要刪除字段的唯一性約束,則只需刪除該字段的唯一性索引即可,其語法格式如下:ALTERTABLE表名DROPINDEX唯一索引名;例如,要刪除用戶表users的telephone字段的唯一性索引,可以使用如下代碼:altertableusersdropindexphone_unique;2.4.3修改表結(jié)構(gòu)3.修改表的其他選項常用的操作如:修改存儲引擎、修改默認(rèn)字符集等,其語法格式如下:ALTERTABLE表名ENGINE=新的存儲引擎類型;ALTERTABLE表名DEFAULTCHARSET=新的字符集;例如,將users表的存儲引擎修改為MyISAM,默認(rèn)字符集設(shè)置為utf8,可以使用如下代碼:altertableusersengine=MyISAM;altertableusersdefaultcharset=utf8;2.4.3修改表結(jié)構(gòu)4.修改表名ALTERTABLE原表名RENAMETO新表名;還可以使用RENAMETABLE語句,其語法格式如下:RENAMETABLE原表名TO新表名;例如,將users表的表名修改為tbl_users,可以使用如下代碼:altertableusersrenametotbl_users;或renametableuserstotbl_users;2.4.4刪除數(shù)據(jù)庫表刪除數(shù)據(jù)庫表使用droptable語句實現(xiàn),其語法格式如下:DROPTABLE[IFEXISTS]表名1[,表名2,…];例如,刪除users表可使用如下語句:droptableusers;2.5MySQL存儲引擎存儲引擎是如何存儲數(shù)據(jù)、如何為存儲的數(shù)據(jù)建立索引和如何更新、查詢數(shù)據(jù)。在關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)以表的形式存儲,所以存儲引擎也可以稱為表類型。MySQL配置了許多不同的存儲引擎,可以預(yù)先設(shè)置或者在MySQL服務(wù)器中啟用。開發(fā)人員可以根據(jù)需要選擇適用于服務(wù)器、數(shù)據(jù)庫和表格的存儲引擎,以便在選擇如何存儲信息、如何檢索這些信息以及需要數(shù)據(jù)結(jié)合什么性能和功能的時候為設(shè)計提供最大的靈活性。1.InnoDB存儲引擎2.MyISAM存儲引擎2.6案例:網(wǎng)上書店系統(tǒng)本節(jié)將繼續(xù)介紹網(wǎng)上書店系統(tǒng)數(shù)據(jù)庫的設(shè)計和實現(xiàn)過程。本系統(tǒng)定義的數(shù)據(jù)庫中主要包含以下幾張表:用戶表Users圖書類別表BookType圖書信息表BookInfo訂單信息表Orders訂單詳情表OrderDetails。2.5案例:網(wǎng)上書店系統(tǒng)1.用戶表UsersCREATETABLEusers(U_IDintNOTNULLauto_incrementPRIMARYKEY,U_Namevarchar(20)NOTNULLUNIQUEKEY,U_Pwdvarchar(20)NOTNULL,U_Sexchar(2)defaultNULL,U_Phonevarchar(20)defaultNULL);2.5案例:網(wǎng)上書店系統(tǒng)2.圖書類別表BookTypeCREATETABLEbooktype(BT_IDintNOTNULLauto_incrementPRIMARYKEY,BT_Namevarchar(20)NOTNULL,BT_FatherIDintdefaultNULL,BT_HaveChildchar(2)defaultNULL);2.5案例:網(wǎng)上書店系統(tǒng)3.圖書信息表BookInfoCREATETABLEbookinfo(B_IDintNOTNULLauto_incrementPRIMARYKEY,B_Namevarchar(50)NOTNULL,BT_IDintNOTNULL,B_Authorvarchar(20)NOTNULL,B_ISBNvarchar(30)NOTNULL,B_Publishervarchar(30)NOTNULL,B_DatedateNOTNULL,B_MarketPricefloatNOTNULL,B_SalePricefloatNOTNULL,B_QualitysmallintNOTNULL,B_SalessmallintNOTNULL,CONSTRAINTbookinfo_ibfk_1FOREIGNKEY(BT_ID)REFERENCESbooktype(BT_ID));2.5案例:網(wǎng)上書店系統(tǒng)4.訂單信息表OrdersCREATETABLEorders(O_IDintNOTNULLauto_incrementPRIMARYKEY,U_IDintNOTNULL,O_TimedateNOTNULL,O_StatusintNOTNULL,O_UserNamevarchar(20)NOTNULL,O_Phonevarchar(20)NOTNULL,O_Addressvarchar(50)NOTNULL,O_PostCodechar(6)NOTNULL,O_Emailvarchar(50)NOTNULL,O_TotalPricefloatNOTNULL,CONSTRAINTorders_ibfk_1FOREIGNKEY(U_ID)REFERENCESusers(U_ID));2.5案例:網(wǎng)上書店系統(tǒng)5.訂單詳情表OrderDetailsCREATETABLEorderdetails(OD_IDintNOTNULLauto_incrementPRIMARYKEY,O_IDintNOTNULL,B_IDintNOTNULL,OD_NumbersmallintNOTNULL,OD_PricefloatNOTNULL,CONSTRAINTorderdetails_ibfk_1FOREIGNKEY(O_ID)REFERENCESorders(O_ID),CONSTRAINTorderdetails_ibfk_2FOREIGNKEY(B_ID)REFERENCESbookinfo(B_ID));本章總結(jié)首先簡單的介紹了MySQL數(shù)據(jù)庫及MySQL的體系結(jié)構(gòu);然后介紹了如何安裝和配置MySQL服務(wù);重點介紹了如何使用MySQL命令及SQL語句對MySQL數(shù)據(jù)庫及數(shù)據(jù)表進行操作;最后,通過實現(xiàn)一個簡單的案例,使讀者能快速地掌握如何使用MySQL數(shù)據(jù)庫。實踐與練習(xí)一、選擇題在MySQL中,通常使用________語句來指定一個已有數(shù)據(jù)庫作為當(dāng)前工作數(shù)據(jù)庫。A.USING B.USED C.USES D.USE2.SQL語句中修改表結(jié)構(gòu)的命令是________。A.MODIFYTABLE B.MODIFYSTRUCTUREC.ALTERTABLE D.ALTERSTRUCTURE3.用SQL的ALTERTABLE語句修改基本表時,刪除其中某個列的約束條件應(yīng)使用的子句是_______。A.ADDB.DELETEC.MODIFYD.DROP實踐與練習(xí)4.用SQL語句建立表時將某字段定義為主關(guān)鍵字,應(yīng)使用關(guān)鍵字________。CHECK B.PRIMARYKEY C.FREE D.UNIQUE5.啟動MySQL服務(wù)所使用的命令是
。A.START B.NETSTARTMYSQLC.STARTMYSQL D.STARTNETMYSQL實踐與練習(xí)(6)在創(chuàng)建表時,不允許某列為空可以使用________。A.NOTNULL B.NONULL C.NOTBLANK D.NOBLANK(7)支持外鍵的存儲引擎是________。A.MyISAM B.InnoDB C.MEMORY D.CHARACTER(8)創(chuàng)建數(shù)據(jù)庫Demo的語句正確的是________。A.CREATEDATABASEDemo; B.SHOWDATABASES;C.USEDemo; D.DROPDATABASEDemo;實踐與練習(xí)(9)MySQL命令“DROPDATABASEDemo;”的功能是________。A.修改數(shù)據(jù)庫名為Demo B.刪除數(shù)據(jù)庫DemoC.使用數(shù)據(jù)庫Demo D.創(chuàng)建數(shù)據(jù)庫Demo(10)修改表students的phone字段,將VARCHAR(20)修改為VARCHAR(11),下列命令語句錯誤的是________。A.ALTERTABLEstudentsMODIFYphoneVARCHAR(11);B.ALTERTABLEstudentsCHANGEphonephoneVARCHAR(11);C.ALTERTABLEstudentsCHANGEphoneVARCHAR(11);D.ALTERTABLE…MODIFY和ALTERTABLE…CHANGE命令都可以完成修改實踐與練習(xí)二、填空題(1)創(chuàng)建唯一性索引時,通常使用的關(guān)鍵字是________。(2)在CREATETABLE語句中,通常使用________________關(guān)鍵字來指定主鍵。(3)MySQL默認(rèn)使用的端口號是________。(4)MySQL安裝成功后,在系統(tǒng)中會默認(rèn)建立一個________用戶。 (5)MySQL中,查看當(dāng)前服務(wù)器上數(shù)據(jù)庫列表所使用的命令為_______________。實踐與練習(xí)三、操作題在數(shù)據(jù)庫school中有學(xué)生信息表students,學(xué)生信息表結(jié)構(gòu)如表2-6所示。使用SQL語句完成以下操作。(1)創(chuàng)建數(shù)據(jù)庫school。(2)創(chuàng)建數(shù)據(jù)表students。(3)修改表結(jié)構(gòu),添加“聯(lián)系電話”字段s_phone,類型為varchar(20),允許為空。(4)修改表結(jié)構(gòu),刪除出生日期字段。 (5)刪除數(shù)據(jù)表students。(6)刪除數(shù)據(jù)庫school。實驗指導(dǎo)題目1MySQL數(shù)據(jù)庫的安裝和配置1任務(wù)描述掌握MySQL數(shù)據(jù)庫的安裝和配置。2任務(wù)要求(1)下載相應(yīng)版本軟件并進行安裝,完成MySQL服務(wù)實例的配置。(2)配置PATH環(huán)境變量。(3)完成指定操作:啟動服務(wù)、連接MySQL服務(wù)器、停止服務(wù)。3操作步驟提示(1)下載相應(yīng)版本軟件并進行安裝,完成MySQL服務(wù)實例的配置。(2)配置PATH環(huán)境變量。(3)完成指定操作:啟動服務(wù)、連接MySQL服務(wù)器、停止服務(wù)。實驗指導(dǎo)題目2創(chuàng)建第一個JavaWeb程序1任務(wù)描述
完成學(xué)生選課系統(tǒng)數(shù)據(jù)庫的設(shè)計。2任務(wù)要求(1)設(shè)計學(xué)生選課系統(tǒng)的數(shù)據(jù)庫。(2)完成學(xué)生選課系統(tǒng)數(shù)據(jù)庫的創(chuàng)建。(3)完成學(xué)生選課系統(tǒng)數(shù)據(jù)表的創(chuàng)建。3操作步驟提示(1)根據(jù)自己的理解設(shè)計學(xué)生選課系統(tǒng)的數(shù)據(jù)庫。各表參考結(jié)構(gòu)如下:Students(Sno,Sname,Sex,Department),其中Sno為主鍵Courses(Cno,Cname,Credit,Semester,Period),其中Cno為主鍵SC(Sno,Cno,Grade),其中Sno,Cno為主鍵(2)在控制臺中使用SQL語句創(chuàng)建數(shù)據(jù)庫,參考代碼如下:createdatabaseStudentManage;實驗指導(dǎo)(3)在控制臺中使用SQL語句創(chuàng)建數(shù)據(jù)表,參考代碼如下:useStudentManage;CreatetableStudents( //學(xué)生表 Snovarchar(8)primarykey, //學(xué)號 Snamevarchar(10)notnull, //姓名 Sexenum(‘男’,’女’)default‘男’, //性別 Departmentvarchar(20)default‘計算機系’) //所在系);CreatetableCourses( //課程表 Cnovarchar(10)primarykey, //課程號 Cnamevarchar(20)notnull, //課程名稱 Creditintnotnull, //學(xué)分 Semesterintnotnull, //學(xué)期 Periodintnotnull //學(xué)時);實驗指導(dǎo)CreatetableSC( //成績表 Snovarchar(8)notnull, //學(xué)號 Cnovarchar(10)notnull, //課程號 Gradeintnotnull, //成績 Primarykey(Sno,Cno),Foreignkey(Sno)referencesStudents(Sno),Foreignkey(Cno)referencesCourses(Cno));實驗指導(dǎo)題目3使用Navicat完成數(shù)據(jù)庫及數(shù)據(jù)表的操作1任務(wù)描述使用Navicat完成學(xué)生選課系統(tǒng)數(shù)據(jù)庫的設(shè)計。2任務(wù)要求(1)連接MySQL服務(wù)器。(2)創(chuàng)建StudentManage1數(shù)據(jù)庫。(3)創(chuàng)建學(xué)生表、課程表及成績表。(4)完成數(shù)據(jù)的輸入。3操作步驟提示(1)連接MySQL服務(wù)器。(2)創(chuàng)建數(shù)據(jù)庫。右擊“mysql”連接,選擇“NewDatabase”選項,創(chuàng)建數(shù)據(jù)庫StudentManage1,設(shè)置字符集為utf8,完成數(shù)據(jù)庫的創(chuàng)建。(3)創(chuàng)建數(shù)據(jù)表。雙擊StudentManage1數(shù)據(jù)庫圖標(biāo),然后右擊“Tables”圖標(biāo),選擇“NewTable”選項,在右側(cè)窗口中設(shè)計表的結(jié)構(gòu)。(4)添加記錄。在左側(cè)導(dǎo)航窗口中,雙擊students數(shù)據(jù)表圖標(biāo),打開數(shù)據(jù)表,然后向表中添加記錄。謝謝!MySQL數(shù)據(jù)庫基礎(chǔ)與實踐3MySQL管理表記錄第章本章內(nèi)容3.1MySQL基本數(shù)據(jù)類型3.2MySQL運算符3.3字符集設(shè)置3.4增添表記錄3.5修改表記錄3.6刪除表記錄3.7案例:圖書管理系統(tǒng)中表記錄的操作3.1MySQL基本數(shù)據(jù)類型在創(chuàng)建表時,表中的每個字段都有數(shù)據(jù)類型,它用來指定數(shù)據(jù)的存儲格式、約束和有效范圍。選擇合適的數(shù)據(jù)類型可以有效地節(jié)省存儲空間,同時可以提升數(shù)據(jù)的計算性能。MySQL提
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 快遞員工培訓(xùn)課件
- 寵物養(yǎng)殖租賃合同范本
- 金屬橋架合同范本
- 小學(xué)生食品安全課件
- 高低壓配電工程施工承包合同
- 檢驗滅火器合同書
- 關(guān)于采購辦公用品的申請報告與審批流程說明
- 民族局離婚協(xié)議書
- 中學(xué)生課外閱讀指南觀后感
- 法律咨詢行業(yè)法律建議免責(zé)
- 臥式儲罐體積容積計算(帶公式)
- 前置胎盤詳解課件
- 《社會保障》課件
- 錄播教室裝修方案
- 《道路客運輸駕駛員“兩客一危”安全警示教育培訓(xùn)》心理健康課件
- 烹飪刀工與原料成型技術(shù)課件
- 部編版五年級語文下冊第一課《古詩三首》課件
- 滬教版四年級數(shù)學(xué)下冊全冊完整課件
- 小學(xué)數(shù)學(xué)西南師大三年級上冊三辨認(rèn)方向指南針PPT
- 工作室成員成長檔案模板(內(nèi)部版)課件
- (完整版)馬克思主義基本原理概論知識點
評論
0/150
提交評論