MySQL數(shù)據(jù)庫基礎(chǔ)與實例教程演示文稿_第1頁
MySQL數(shù)據(jù)庫基礎(chǔ)與實例教程演示文稿_第2頁
MySQL數(shù)據(jù)庫基礎(chǔ)與實例教程演示文稿_第3頁
MySQL數(shù)據(jù)庫基礎(chǔ)與實例教程演示文稿_第4頁
MySQL數(shù)據(jù)庫基礎(chǔ)與實例教程演示文稿_第5頁
已閱讀5頁,還剩710頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

MySQL數(shù)據(jù)庫基礎(chǔ)與實例教程演示文稿目前一頁\總數(shù)七百一十五頁\編于十五點(diǎn)優(yōu)選MySQL數(shù)據(jù)庫基礎(chǔ)與實例教程目前二頁\總數(shù)七百一十五頁\編于十五點(diǎn)孔祥盛MySQL數(shù)據(jù)庫基礎(chǔ)與實例教程

之?dāng)?shù)據(jù)庫設(shè)計概述目前三頁\總數(shù)七百一十五頁\編于十五點(diǎn)123本章拋開MySQL講解關(guān)系數(shù)據(jù)庫設(shè)計的相關(guān)知識,以“選課系統(tǒng)”為例,講解“選課系統(tǒng)”數(shù)據(jù)庫的設(shè)計流程。4內(nèi)容一覽數(shù)據(jù)庫設(shè)計的相關(guān)知識數(shù)據(jù)庫概述E-R圖關(guān)系數(shù)據(jù)庫設(shè)計目前四頁\總數(shù)七百一十五頁\編于十五點(diǎn)123簡單地說:數(shù)據(jù)庫(Database或DB)是存儲、管理數(shù)據(jù)的容器;嚴(yán)格地說:數(shù)據(jù)庫是“按照某種數(shù)據(jù)結(jié)構(gòu)對數(shù)據(jù)進(jìn)行組織、存儲和管理的容器”??偨Y(jié):數(shù)據(jù)永遠(yuǎn)是數(shù)據(jù)庫的核心。關(guān)系數(shù)據(jù)庫關(guān)系數(shù)據(jù)庫管理系統(tǒng)結(jié)構(gòu)化查詢語言SQL1.1數(shù)據(jù)庫概述目前五頁\總數(shù)七百一十五頁\編于十五點(diǎn)1.1.1關(guān)系數(shù)據(jù)庫管理系統(tǒng)通過“數(shù)據(jù)庫管理系統(tǒng)”,數(shù)據(jù)庫用戶可以輕松地實現(xiàn)數(shù)據(jù)庫容器中各種數(shù)據(jù)庫對象的訪問(增、刪、改、查等操作),并可以輕松地完成數(shù)據(jù)庫的維護(hù)工作(備份、恢復(fù)、修復(fù)等操作)目前六頁\總數(shù)七百一十五頁\編于十五點(diǎn)數(shù)據(jù)庫用戶無法直接通過操作系統(tǒng)獲取數(shù)據(jù)庫文件中的具體內(nèi)容;數(shù)據(jù)庫管理系統(tǒng)通過調(diào)用操作系統(tǒng)的進(jìn)程管理、內(nèi)存管理、設(shè)備管理以及文件管理等服務(wù),為數(shù)據(jù)庫用戶提供管理、控制數(shù)據(jù)庫容器中各種數(shù)據(jù)庫對象、數(shù)據(jù)庫文件的接口。1.1.1關(guān)系數(shù)據(jù)庫管理系統(tǒng)目前七頁\總數(shù)七百一十五頁\編于十五點(diǎn)添加標(biāo)題添加標(biāo)題目前八頁\總數(shù)七百一十五頁\編于十五點(diǎn)層次模型面向?qū)ο竽P途W(wǎng)狀模型關(guān)系模型數(shù)據(jù)庫管理系統(tǒng)常用的數(shù)學(xué)模型

目前九頁\總數(shù)七百一十五頁\編于十五點(diǎn)添加標(biāo)題基于“關(guān)系模型”的數(shù)據(jù)庫管理系統(tǒng)稱為關(guān)系數(shù)據(jù)庫管理系統(tǒng)(簡稱為RDBMS)。隨著關(guān)系數(shù)據(jù)庫管理系統(tǒng)的日臻完善,目前關(guān)系數(shù)據(jù)庫管理系統(tǒng)已占據(jù)主導(dǎo)地位。1.1.1關(guān)系數(shù)據(jù)庫管理系統(tǒng)/blog/jdd-2013-what-we-found-out-about-databases目前十頁\總數(shù)七百一十五頁\編于十五點(diǎn)2014年2月數(shù)據(jù)庫流行度排行榜截至目前,MySQL已經(jīng)成功逆襲!1.1.1關(guān)系數(shù)據(jù)庫管理系統(tǒng)目前十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)2014年3月數(shù)據(jù)庫流行度排行榜1.1.1關(guān)系數(shù)據(jù)庫管理系統(tǒng)目前十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)2014年4月數(shù)據(jù)庫流行度排行榜1.1.1關(guān)系數(shù)據(jù)庫管理系統(tǒng)目前十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)開源MySQL源代碼免費(fèi)下載簡單MySQL體積小,便于安裝MySQL性能足夠與商業(yè)數(shù)據(jù)庫媲美功能強(qiáng)大MySQL提供的功能足夠與商業(yè)數(shù)據(jù)庫媲美逆襲原因性能優(yōu)越1.1.1關(guān)系數(shù)據(jù)庫管理系統(tǒng)目前十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)關(guān)系數(shù)據(jù)庫中所謂的“關(guān)系”,實質(zhì)上是一張二維表。請看下面的課程表。字段名(列名)第1個字段(列)第1條記錄第2條記錄第3條記錄第4條記錄第5條記錄第3個字段(列)第2個字段(列)第4個字段(列)1.1.2關(guān)系數(shù)據(jù)庫目前十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)作為數(shù)據(jù)庫中最為重要的數(shù)據(jù)庫對象,數(shù)據(jù)庫表的設(shè)計過程并非一蹴而就,上述課程表根本無法滿足“選課系統(tǒng)”的功能需求。事實上,數(shù)據(jù)庫表的設(shè)計過程并非如此簡單,本章的重點(diǎn)就是討論如何設(shè)計結(jié)構(gòu)良好的數(shù)據(jù)庫表。1.1.2關(guān)系數(shù)據(jù)庫目前十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)結(jié)構(gòu)化查詢語言(StructuredQueryLanguage或簡稱為SQL)是一種應(yīng)用最為廣泛的關(guān)系數(shù)據(jù)庫語言,該語言定義了操作關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語法,幾乎所有的關(guān)系數(shù)據(jù)庫管理系統(tǒng)都支持SQL。1.1.3結(jié)構(gòu)化查詢語言SQL目前十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)學(xué)習(xí)重點(diǎn)目前十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)123數(shù)據(jù)庫設(shè)計是一個“系統(tǒng)工程”,要求數(shù)據(jù)庫開發(fā)人員:熟悉“商業(yè)領(lǐng)域”的商業(yè)知識。利用“管理學(xué)”的知識與其他開發(fā)人員進(jìn)行有效溝通。掌握一些數(shù)據(jù)庫設(shè)計輔助工具。數(shù)據(jù)庫設(shè)計輔助工具商業(yè)知識和溝通技能“選課系統(tǒng)”概述45定義問題域編碼規(guī)范1.2數(shù)據(jù)庫設(shè)計的相關(guān)知識目前十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)數(shù)據(jù)庫技術(shù)解決的是“商業(yè)領(lǐng)域”的“商業(yè)問題”。數(shù)據(jù)庫開發(fā)人員有必要成為該“商業(yè)領(lǐng)域”的專家,與其他開發(fā)人員(包括最終用戶)一起工作,繼而使用數(shù)據(jù)庫技術(shù)解決該“商業(yè)領(lǐng)域”的“商業(yè)問題”。1.2.1商業(yè)知識和溝通技能目前二十頁\總數(shù)七百一十五頁\編于十五點(diǎn)1.2.2數(shù)據(jù)庫設(shè)計輔助工具

工具模型技術(shù)業(yè)務(wù)模型面向?qū)ο蠓治龊驮O(shè)計技術(shù)結(jié)構(gòu)化分析和設(shè)計技術(shù)軟件測試技術(shù)關(guān)系數(shù)據(jù)庫設(shè)計技術(shù)ErwinPowerDesignerRationalRoseVisioVC++6.0VisualstudioEclipseNetBeans單元測試工具功能測試工具性能測試工具程序流程圖DFD時序圖狀態(tài)圖CASE工具IDE工具測試工具數(shù)據(jù)模型類圖E-R圖目前二十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)限于篇幅,在不影響“選課系統(tǒng)”核心功能的基礎(chǔ)上,適當(dāng)?shù)貙υ撓到y(tǒng)進(jìn)行“定制”、“擴(kuò)展”以及“瘦身”。

1.2.3“選課系統(tǒng)”概述目前二十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)定義問題域是數(shù)據(jù)庫設(shè)計過程中重要的活動,它的目標(biāo)是準(zhǔn)確定義要解決的商業(yè)問題?!斑x課系統(tǒng)”亟需解決的“商業(yè)”問題有哪些?1.2.4定義問題域目前二十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)在編程的時候會考慮代碼的可讀性嗎?你覺得代碼可讀性是需要考慮的問題嗎?1.代碼不僅要自己能讀懂,還要別人也能看懂?2.盡量做到可讀,但時間緊任務(wù)重的時候就顧不上了?3.代碼只要自己能讀懂就可以了?4.代碼寫完就完了,不用管以后是否能讀懂?5.不知道,沒有想過這個問題?1.2.5編碼規(guī)范目前二十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)請記住:盡最大努力把方便留給別人和將來的自己。建議大家遵循本書羅列的常用編程規(guī)范!目前二十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)123關(guān)系實體和屬性E-R圖的設(shè)計原則E-R圖設(shè)計的質(zhì)量直接決定了關(guān)系數(shù)據(jù)庫設(shè)計的質(zhì)量。1.3E-R圖目前二十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)

實體不是某一個具體事物,而是某一種類別所有事物的統(tǒng)稱。屬性通常用于表示實體的某種特征,也可以使用屬性表示實體間關(guān)系的特征實體屬性屬性1.3.1實體和屬性目前二十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)E-R圖中的關(guān)系用于表示實體間存在的聯(lián)系,在E-R圖中,實體間的關(guān)系通常使用一條線段表示。E-R圖中實體間的關(guān)系是雙向的。關(guān)系關(guān)系1.3.2關(guān)系目前二十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)

基數(shù)表示一個實體到另一個實體之間關(guān)聯(lián)的數(shù)目,基數(shù)是針對關(guān)系之間的某個方向提出的概念,基數(shù)可以是一個取值范圍,也可以是某個具體數(shù)值基數(shù)可選基數(shù)強(qiáng)制1.3.2關(guān)系目前二十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)

元表示關(guān)系所關(guān)聯(lián)的實體個數(shù)。二元關(guān)系二元關(guān)系一元關(guān)系1.3.2關(guān)系目前三十頁\總數(shù)七百一十五頁\編于十五點(diǎn)

使用關(guān)聯(lián)(Association)表示實體間關(guān)系的屬性。關(guān)聯(lián)關(guān)聯(lián)1.3.2關(guān)系目前三十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)123實體是一個單獨(dú)的個體,不能存在于另一個實體中,成為另一個實體的屬性。屬性應(yīng)該存在于、且只存在于某一個地方(實體或者關(guān)聯(lián))。同一個實體在同一個E-R圖內(nèi),僅出現(xiàn)一次。

數(shù)據(jù)庫開發(fā)人員通常采用“一事一地”的原則從系統(tǒng)的功能描述中抽象出來E-R圖。1.3.3E-R圖的設(shè)計原則目前三十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)1.為E-R圖中的每個實體建立一張表。2.為每張表定義一個主鍵(如果需要,可以向表添加一個沒有實際意義的字段作為該表的主鍵)3.增加外鍵表示一對多關(guān)系。4.建立新表表示多對多關(guān)系。5.為字段選擇合適的數(shù)據(jù)類型。6.定義約束條件(如果需要)。7.評價關(guān)系的質(zhì)量,并進(jìn)行必要的改進(jìn)。1.4關(guān)系數(shù)據(jù)庫設(shè)計目前三十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)student(student_no,student_name,student_contact)course(course_name,up_limit,description,status)teacher(teacher_no,teacher_name,teacher_contact)classes(class_name,department_name)1.4.1為每個實體建立一張數(shù)據(jù)庫表目前三十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)關(guān)鍵字(key):用以唯一標(biāo)識表中的每行記錄。主鍵(PrimaryKey):在所有的關(guān)鍵字中選擇一個關(guān)鍵字,作為該表的主關(guān)鍵字,簡稱主鍵。1.4.2為每張表定義一個主鍵目前三十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)主鍵有以下兩個特征:(1)表的主鍵可以是一個字段,也可以是多個字段的組合(這種情況稱為復(fù)合主鍵)。(2)表中主鍵的值具有唯一性且不能取空值(NULL);當(dāng)表中的主鍵由多個字段構(gòu)成時,每個字段的值都不能取NULL。主鍵設(shè)計技巧,請參看本書內(nèi)容。1.4.2為每張表定義一個主鍵目前三十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)student(student_no,student_name,student_contact)course(course_no,course_name,up_limit,description,status)teacher(teacher_no,teacher_name,teacher_contact)classes(class_no,class_name,department_name)1.4.2為每張表定義一個主鍵目前三十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)外鍵(ForeignKey):如果表A中的一個字段a對應(yīng)于表B的主鍵b,則字段a稱為表A的外鍵,此時存儲在表A中字段a的值,要么是NULL,要么是來自于表B主鍵b的值。1.4.3增加外鍵表示一對多關(guān)系目前三十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)情形一:如果實體間的關(guān)系為一對多關(guān)系,則需要將“一”端實體的主鍵放到“多”端實體中,然后作為“多”端實體的外鍵,通過該外鍵即可表示實體間的一對多關(guān)系。1.4.3增加外鍵表示一對多關(guān)系目前三十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)讓學(xué)生記住所在班級,遠(yuǎn)比班級“記住”所有學(xué)生容易的多。1.4.3增加外鍵表示一對多關(guān)系目前四十頁\總數(shù)七百一十五頁\編于十五點(diǎn)情形二:實體間的一對一關(guān)系,可以看成一種特殊的一對多關(guān)系:將“一”端實體的主鍵放到另“一”端的實體中,并作為另“一”端的實體的外鍵,然后將外鍵定義為唯一性約束(UniqueConstraint)。1.4.3增加外鍵表示一對多關(guān)系目前四十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)PK1.4.3增加外鍵表示一對多關(guān)系目前四十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)PK后的方案:student(student_no,student_name,student_contact,class_no)course(course_no,course_name,up_limit,description,status,teacher_no)teacher(teacher_no,teacher_name,teacher_contact)classes(class_no,class_name,department_name)1.4.3增加外鍵表示一對多關(guān)系目前四十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)情形三:如果兩個實體間的關(guān)系為多對多關(guān)系,則需要添加新表表示該多對多關(guān)系,然后將該關(guān)系涉及到的實體的“主鍵”分別放入到新表中(作為新表的外鍵),并將關(guān)系自身的屬性放入到新表中作為新表的字段。1.4.4建立新表表示多對多關(guān)系目前四十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)teacher(teacher_no,teacher_name,teacher_contact)classes(class_no,class_name,department_name)course(course_no,course_name,up_limit,description,status,teacher_no)student(student_no,student_name,student_contact,class_no)choose(choose_no,student_no,course_no,score,choose_time)1.4.4建立新表表示多對多關(guān)系目前四十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)1.4.4建立新表表示多對多關(guān)系目前四十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)1.4.5為字段選擇合適的數(shù)據(jù)類型目前四十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)常用的約束條件有6種:主鍵(PrimaryKey)約束外鍵(ForeignKey)約束唯一性(Unique)約束默認(rèn)值(Default)約束非空(NotNULL)約束檢查(Check)約束。1.4.6定義約束(Constraint)條件目前四十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)設(shè)計數(shù)據(jù)庫時,有兩個不爭的事實。 數(shù)據(jù)庫中冗余的數(shù)據(jù)需要額外的維護(hù),因此質(zhì)量好的一套表應(yīng)該盡量“減少冗余數(shù)據(jù)”。 數(shù)據(jù)庫中經(jīng)常發(fā)生變化的數(shù)據(jù)需要額外的維護(hù),因此質(zhì)量好的一套表應(yīng)該盡量“避免數(shù)據(jù)經(jīng)常發(fā)生變化”。1.4.7評價數(shù)據(jù)庫表設(shè)計的質(zhì)量目前四十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)冗余的數(shù)據(jù)需要額外的維護(hù),并且容易導(dǎo)致“數(shù)據(jù)不一致”、“插入異?!币约啊皠h除異?!钡葐栴}的發(fā)生。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十頁\總數(shù)七百一十五頁\編于十五點(diǎn)場景一:插入異常。場景二:修改復(fù)雜。場景三:刪除異常。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)規(guī)范化是通過最小化數(shù)據(jù)冗余來提升數(shù)據(jù)庫設(shè)計質(zhì)量的過程,規(guī)范化是基于函數(shù)依賴以及一系列范式定義的,最為常用的是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)函數(shù)依賴:一張表內(nèi)兩個字段值之間的一一對應(yīng)關(guān)系稱為函數(shù)依賴。第一范式:如果一張表內(nèi)同類字段不重復(fù)出現(xiàn),該表就滿足第一范式的要求。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)第一范式1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)第二范式:一張表在滿足第一范式的基礎(chǔ)上,如果每個“非關(guān)鍵字”字段“僅僅”函數(shù)依賴于主鍵,那么該表滿足第二范式的要求。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)第二范式1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)第三范式:如果一張表滿足第二范式的要求,并且不存在“非關(guān)鍵字”字段函數(shù)依賴于任何其他“非關(guān)鍵字”字段,那么該表滿足第三范式的要求。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)第三范式1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)統(tǒng)計學(xué)生的個人資料時,如果讀者是一名數(shù)據(jù)庫開發(fā)人員,應(yīng)該讓學(xué)生上報年齡信息,還是讓學(xué)生上報出生日期?如何確保每一門課程選報學(xué)生的人數(shù),不超過人數(shù)上限?1.4.9避免數(shù)據(jù)經(jīng)常發(fā)生變化目前五十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)方案一:course(course_no,course_no,course_name,up_limit,description,status,teacher_no,available)方案二:數(shù)據(jù)庫表無需進(jìn)行任何更改。1.4.9避免數(shù)據(jù)經(jīng)常發(fā)生變化目前六十頁\總數(shù)七百一十五頁\編于十五點(diǎn)任務(wù)1:描述“選課系統(tǒng)”的問題域。任務(wù)2:將本書圖1-7中“團(tuán)購網(wǎng)站、顧客以及房源之間的三元關(guān)系表示方法

”E-R圖轉(zhuǎn)化為關(guān)系(模式)。任務(wù)3:使用筆紙或者word繪圖工具,繪制“選課系統(tǒng)”的E-R圖。任務(wù)4:將“選課系統(tǒng)”的E-R圖轉(zhuǎn)化為關(guān)系(模式)。任務(wù)布置目前六十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)Thanks目前六十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)目前六十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)孔祥盛MySQL數(shù)據(jù)庫基礎(chǔ)與實例教程

之MySQL基礎(chǔ)知識目前六十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)123通過本章的學(xué)習(xí),讀者可以掌握一些常用的MySQL命令,從而對MySQL數(shù)據(jù)庫進(jìn)行一些簡單的管理。本章知識點(diǎn)較為繁雜,希望保持一份兒耐心。4字符集以及字符序設(shè)置MySQL概述MySQL數(shù)據(jù)庫管理MySQL表管理5系統(tǒng)變量內(nèi)容一覽目前六十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)123MySQL由瑞典MySQLAB公司開發(fā)。2008年1月MySQL被美國的SUN公司收購。2009年4月SUN公司又被美國的甲骨文(Oracle)公司收購。MySQL服務(wù)的安裝MySQL的特點(diǎn)MySQL服務(wù)的配置45啟動與停止MySQL服務(wù)MySQL配置文件2.1MySQL概述目前六十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)67MySQL由瑞典MySQLAB公司開發(fā)。2008年1月MySQL被美國的SUN公司收購。2009年4月SUN公司又被美國的甲骨文(Oracle)公司收購。連接MySQL服務(wù)器關(guān)系數(shù)據(jù)庫MySQL客戶機(jī)2.1MySQL概述目前六十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)

MySQL是一個單進(jìn)程多線程、支持多用戶、基于客戶機(jī)/服務(wù)器(Client/Server簡稱C/S)的關(guān)系數(shù)據(jù)庫管理系統(tǒng)。性能高效跨平臺支持簡單易用開源支持多用戶2.1.1MySQL特點(diǎn)目前六十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)MySQL的使用流程

2.1.1MySQL特點(diǎn)目前六十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)MySQL其他概念(請參看本書內(nèi)容):MySQL服務(wù)MySQL服務(wù)實例MySQL服務(wù)器端口號2.1.1MySQL特點(diǎn)目前七十頁\總數(shù)七百一十五頁\編于十五點(diǎn)MySQL服務(wù)的安裝(請參看本書內(nèi)容)。建議自學(xué),并上機(jī)操作。注意:本書使用的MySQL為5.6版本??梢缘奖緯付ǖ木W(wǎng)址下載MySQL圖形化安裝包mysql-5.6.5-m8-win32.msi。

2.1.2MySQL服務(wù)的安裝目前七十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)MySQL服務(wù)的配置(請參看本書內(nèi)容)。建議自學(xué),并上機(jī)操作。配置過程中的其他知識點(diǎn):OLAP與OLTP

EnableStrictMode選項字符集/字符序MySQL超級管理員root賬戶my.ini配置文件中2.1.3MySQL服務(wù)的配置目前七十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)MySQL服務(wù)的啟動與停止(請參看本書內(nèi)容)。建議自學(xué),并上機(jī)操作。2.1.4啟動與停止MySQL服務(wù)目前七十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)my.ini配置文件包含了多種參數(shù)選項組,每個參數(shù)選項組通過“[]”指定,每個參數(shù)選項組可以配置多個參數(shù)信息。通常情況下,每個參數(shù)遵循“參數(shù)名=參數(shù)值”這種配置格式,參數(shù)名一般是小寫字母,參數(shù)名大小寫敏感。常用的參數(shù)選項組有“[client]”、“[mysql]”以及“[mysqld]”參數(shù)選項組。2.1.5MySQL配置文件目前七十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)[client]參數(shù)選項組:配置了MySQL自帶的MySQL5.6命令行窗口可以讀取的參數(shù)信息。

常用的參數(shù)是port(默認(rèn)值是3306)。修改該port值會導(dǎo)致新打開的MySQL5.6命令行窗口無法連接MySQL服務(wù)器。2.1.5MySQL配置文件目前七十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)[mysql]參數(shù)選項組:配置了MySQL客戶機(jī)程序mysql.exe可以讀取的參數(shù)信息。

常用的參數(shù)有“prompt”、“default-character-set=gbk”。

修改“[mysql]”參數(shù)選項組中的參數(shù)值,將直接影響新打開的MySQL客戶機(jī)。2.1.5MySQL配置文件目前七十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)[mysqld]參數(shù)選項組:配置了MySQL服務(wù)程序mysqld.exe可以讀取的參數(shù)信息,mysqld.exe啟動時,將[mysqld]參數(shù)選項組的參數(shù)信息加載到服務(wù)器內(nèi)存,繼而生成MySQL服務(wù)實例。2.1.5MySQL配置文件目前七十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)[mysqld]參數(shù)選項組:常用的參數(shù)有“port”、“basedir”、“datadir”、“character-set-server”、“sql_mode”、“max_connections”以及“default_storage_engine”等。2.1.5MySQL配置文件目前七十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)[mysqld]參數(shù)選項組:修改“[mysqld]”參數(shù)選項組的參數(shù)值,只有重新啟動MySQL服務(wù),將修改后的配置文件參數(shù)信息加載到服務(wù)器內(nèi)存后,新配置文件才會在新的MySQL服務(wù)實例中生效。

如果“[mysqld]”參數(shù)選項組的參數(shù)信息出現(xiàn)錯誤,將會導(dǎo)致MySQL服務(wù)無法啟動。2.1.5MySQL配置文件目前七十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)MySQL客戶機(jī)(本書使用前兩個):

MySQL5.6命令行窗口

CMD命令提示符窗口

WEB瀏覽器(例如phpMyAdmin)第三方客戶機(jī)程序(例如MySQL-Front、MySQL

ManagerforMySQL等)2.1.6MySQL客戶機(jī)目前八十頁\總數(shù)七百一十五頁\編于十五點(diǎn)phpMyAdmin2.1.6MySQL客戶機(jī)目前八十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)MySQL-Front2.1.6MySQL客戶機(jī)目前八十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)MySQL

ManagerforMySQL2.1.6MySQL客戶機(jī)目前八十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)2.1.6MySQL客戶機(jī)HeidiSQL目前八十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)MySQL客戶機(jī)連接MySQL服務(wù)器須提供:合法的登錄主機(jī):解決“from”的問題。

合法的賬戶名以及密碼:解決“who”的問題。MySQL服務(wù)器主機(jī)名(或IP地址):解決“to”的問題。

端口號:解決“多卡多待”的問題。MySQL客戶機(jī)與MySQL服務(wù)器是同一臺主機(jī)時,主機(jī)名可以使用localhost(或者)。2.1.7連接MySQL服務(wù)器目前八十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)當(dāng)MySQL客戶機(jī)與MySQL服務(wù)器是同一臺主機(jī)時,打開命令提示符窗口,輸入mysql-h-P3306-uroot–proot或者mysql-hlocalhost-P3306-uroot–proot然后回車(注意-p后面緊跟密碼root),即可實現(xiàn)本地MySQL客戶機(jī)與本地MySQL服務(wù)器之間的成功連接。2.1.7連接MySQL服務(wù)器目前八十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)2.1.7連接MySQL服務(wù)器目前八十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)123MySQL由瑞典MySQLAB公司開發(fā),默認(rèn)情況下MySQL使用的是latin1字符集。由此可能導(dǎo)致MySQL數(shù)據(jù)庫不夠支持中文字符串查詢或者發(fā)生中文字符串亂碼等問題。

MySQL字符集與字符序字符集及字符序概念MySQL的字符集轉(zhuǎn)換過程45MySQL字符集的設(shè)置SQL腳本文件2.2字符集以及字符序設(shè)置目前八十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)字符(Character)是人類語言最小的表義符號,例如‘A’、‘B’等。給定一系列字符,對每個字符賦予一個數(shù)值,用數(shù)值來代表對應(yīng)的字符,這個數(shù)值就是字符的編碼(CharacterEncoding)。給定一系列字符并賦予對應(yīng)的編碼后,所有這些“字符和編碼對”組成的集合就是字符集(CharacterSet)。

2.2.1字符集及字符序概念目前八十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)2.2.1字符集及字符序概念目前九十頁\總數(shù)七百一十五頁\編于十五點(diǎn)字符序(Collation)是指在同一字符集內(nèi)字符之間的比較規(guī)則。一個字符集包含多種字符序,每個字符序唯一對應(yīng)一種字符集。MySQL字符序命名規(guī)則是:以字符序?qū)?yīng)的字符集名稱開頭,以國家名居中(或以general居中),以ci、cs或bin結(jié)尾。ci表示大小寫不敏感,cs表示大小寫敏感,bin表示按二進(jìn)制編碼值比較。2.2.1字符集及字符序概念目前九十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)使用MySQL命令showcharacterset;即可查看當(dāng)前MySQL服務(wù)實例支持的字符集、字符集默認(rèn)的字符序以及字符集占用的最大字節(jié)長度等信息latin1支持西歐字符、希臘字符等gbk支持中文簡體字符big5支持中文繁體字符utf8幾乎支持世界所有國家的字符。2.2.2MySQL字符集及字符序目前九十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)使用MySQL命令showvariableslike'character%';即可查看當(dāng)前MySQL服務(wù)實例使用的字符集。2.2.2MySQL字符集及字符序目前九十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)

character_set_client:MySQL客戶機(jī)字符集。character_set_connection:數(shù)據(jù)通信鏈路字符集,當(dāng)MySQL客戶機(jī)向服務(wù)器發(fā)送請求時,請求數(shù)據(jù)以該字符集進(jìn)行編碼。character_set_database:數(shù)據(jù)庫字符集。character_set_filesystem:MySQL服務(wù)器文件系統(tǒng)字符集,該值是固定的binary。2.2.2MySQL字符集及字符序目前九十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)character_set_results:結(jié)果集的字符集,MySQL服務(wù)器向MySQL客戶機(jī)返回執(zhí)行結(jié)果時,執(zhí)行結(jié)果以該字符集進(jìn)行編碼。character_set_server:MySQL服務(wù)實例字符集。character_set_system:元數(shù)據(jù)(字段名、表名、數(shù)據(jù)庫名等)的字符集,默認(rèn)值為utf8。2.2.2MySQL字符集及字符序目前九十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)使用MySQL命令“showcollation;”即可查看當(dāng)前MySQL服務(wù)實例支持的字符序。2.2.2MySQL字符集及字符序目前九十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)2.2.3MySQL字符集的轉(zhuǎn)換過程目前九十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)方法1:修改my.ini配置文件,可修改MySQL默認(rèn)的字符集。方法2:MySQL提供下列MySQL命令可以“臨時地”修改MySQL“當(dāng)前會話的”字符集以及字符序。2.2.4MySQL字符集的設(shè)置目前九十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)setcharacter_set_client=gbk;setcharacter_set_connection=gbk;setcharacter_set_database=gbk;setcharacter_set_results=gbk;setcharacter_set_server=gbk;setcollation_connection=gbk_chinese_ci;setcollation_database=gbk_chinese_ci;setcollation_server=gbk_chinese_ci;2.2.4MySQL字符集的設(shè)置目前九十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)方法3:使用MySQL命令“setnamesgbk;”可以“臨時一次性地”設(shè)置character_set_client、character_set_connection以及character_set_results的字符集為gbk方法4:連接MySQL服務(wù)器時指定字符集mysql--default-character-set=字符集

-h服務(wù)器IP地址-u賬戶名–p密碼2.2.4MySQL字符集的設(shè)置目前一百頁\總數(shù)七百一十五頁\編于十五點(diǎn)SQL基本的執(zhí)行方法(兩種):

\.C:\mysql\init.sqlsourceC:\mysql\init.sql2.2.5SQL腳本文件目前一百零一頁\總數(shù)七百一十五頁\編于十五點(diǎn)123

數(shù)據(jù)庫是存儲數(shù)據(jù)庫對象的容器。MySQL數(shù)據(jù)庫的管理主要包括數(shù)據(jù)庫的創(chuàng)建、選擇當(dāng)前操作的數(shù)據(jù)庫、顯示數(shù)據(jù)庫結(jié)構(gòu)以及刪除數(shù)據(jù)庫等操作

。查看數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫顯示數(shù)據(jù)庫結(jié)構(gòu)45選擇當(dāng)前操作的數(shù)據(jù)庫刪除數(shù)據(jù)庫2.3MySQL數(shù)據(jù)庫管理目前一百零二頁\總數(shù)七百一十五頁\編于十五點(diǎn)

createdatabasechoose;成功創(chuàng)建choose數(shù)據(jù)庫后,數(shù)據(jù)庫根目錄下會自動創(chuàng)建數(shù)據(jù)庫目錄。2.3.1創(chuàng)建數(shù)據(jù)庫目前一百零三頁\總數(shù)七百一十五頁\編于十五點(diǎn)

使用MySQL命令showdatabases;即可查看MySQL服務(wù)實例上所有的數(shù)據(jù)庫

2.3.2查看數(shù)據(jù)庫目前一百零四頁\總數(shù)七百一十五頁\編于十五點(diǎn)

使用MySQL命令showcreatedatabasechoose;可以查看choose數(shù)據(jù)庫的相關(guān)信息(例如MySQL版本ID號、默認(rèn)字符集等信息)。2.3.3顯示數(shù)據(jù)庫結(jié)構(gòu)目前一百零五頁\總數(shù)七百一十五頁\編于十五點(diǎn)

執(zhí)行“usechoose;”命令后,后續(xù)的MySQL命令以及SQL語句將自動操作choose數(shù)據(jù)庫中所有數(shù)據(jù)庫對象。2.3.4選擇當(dāng)前操作的數(shù)據(jù)庫目前一百零六頁\總數(shù)七百一十五頁\編于十五點(diǎn)刪除student數(shù)據(jù)庫,使用SQL語句dropdatabasestudent;2.3.5刪除數(shù)據(jù)庫目前一百零七頁\總數(shù)七百一十五頁\編于十五點(diǎn)123表是數(shù)據(jù)庫中最為重要的數(shù)據(jù)庫對象

設(shè)置默認(rèn)的存儲引擎MyISAM和InnoDB存儲引擎創(chuàng)建數(shù)據(jù)庫表45顯示表結(jié)構(gòu)表記錄的管理2.4MySQL表管理目前一百零八頁\總數(shù)七百一十五頁\編于十五點(diǎn)67表是數(shù)據(jù)庫中最為重要的數(shù)據(jù)庫對象

刪除表InnoDB表空間2.4MySQL表管理目前一百零九頁\總數(shù)七百一十五頁\編于十五點(diǎn)MySQL提供了插件式(Pluggable)的存儲引擎,存儲引擎是基于表的,同一個數(shù)據(jù)庫,不同的表,存儲引擎可以不同。甚至同一個數(shù)據(jù)庫表,在不同的場合可以應(yīng)用不同的存儲引擎。

2.4.1MyISAM和InnoDB存儲引擎目前一百一十頁\總數(shù)七百一十五頁\編于十五點(diǎn)使用MySQL命令“showengines;”,即可查看MySQL服務(wù)實例支持的存儲引擎。2.4.1MyISAM和InnoDB存儲引擎目前一百一十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)1.InnoDB存儲引擎的特點(diǎn)支持外鍵(ForeignKey)支持事務(wù)(Transaction):如果某張表主要提供OLTP支持,需要執(zhí)行大量的增、刪、改操作(insert、delete、update語句),出于事務(wù)安全方面的考慮,InnoDB存儲引擎是更好的選擇。最新版本的MySQL已經(jīng)開始支持全文檢索。2.4.1MyISAM和InnoDB存儲引擎目前一百一十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)2.MyISAM存儲引擎的特點(diǎn)MyISAM具有檢查和修復(fù)表的大多數(shù)工具。MyISAM表可以被壓縮

MyISAM表最早支持全文索引

但MyISAM表不支持事務(wù)

但MyISAM表不支持外鍵(ForeignKey)。如果需要執(zhí)行大量的select語句,出于性能方面的考慮,MyISAM存儲引擎是更好的選擇。2.4.1MyISAM和InnoDB存儲引擎目前一百一十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)MySQL5.6默認(rèn)的默認(rèn)的存儲引擎是InnoDB。使用MySQL命令setdefault_storage_engine=MyISAM;可以“臨時地”將MySQL“當(dāng)前會話的”存儲引擎設(shè)置為MyISAM,使用MySQL命令“showengines;”可以查看當(dāng)前MySQL服務(wù)實例默認(rèn)的存儲引擎。2.4.2設(shè)置默認(rèn)的存儲引擎目前一百一十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)使用SQL語句“createtable表名”即可創(chuàng)建一個數(shù)據(jù)庫表。例如:

usechoose;setdefault_storage_engine=InnoDB;createtablemy_table(todaydatetime,namechar(20));2.4.3創(chuàng)建數(shù)據(jù)庫表目前一百一十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)成功創(chuàng)建InnoDB存儲引擎的my_table表后,MySQL服務(wù)實例會在數(shù)據(jù)庫目錄choose中自動創(chuàng)建一個名字為表名、后綴名為frm的文件。my_table.frm。2.4.3創(chuàng)建數(shù)據(jù)庫表目前一百一十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)將my_table表的存儲引擎修改為MyISAM。usechoose;altertablemy_tableengine=MyISAM;2.4.3創(chuàng)建數(shù)據(jù)庫表目前一百一十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)使用MySQL命令“destable_name;”即可查看表名為table_name的表結(jié)構(gòu)。2.4.4顯示表結(jié)構(gòu)目前一百一十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)使用MySQL命令“showcreatetabletable_name;”,查看名為table_name表的詳細(xì)信息。2.4.4顯示表結(jié)構(gòu)目前一百一十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)usechoose;insertintomy_tablevalues(now(),'a');insertintomy_tablevalues(now(),'a');insertintomy_tablevalues(now(),NULL);insertintomy_tablevalues(now(),'');select*frommy_table;

2.4.5表記錄的管理目前一百二十頁\總數(shù)七百一十五頁\編于十五點(diǎn)任務(wù)布置1:完成本書場景描述1:MyISAM表記錄的管理的任務(wù)要求。任務(wù)布置2:完成本書場景描述2:InnoDB表記錄的管理的任務(wù)要求。2.4.5表記錄的管理目前一百二十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)

1.共享表空間:MySQL服務(wù)實例承載的所有數(shù)據(jù)庫的所有InnoDB表的數(shù)據(jù)信息、索引信息、各種元數(shù)據(jù)信息以及事務(wù)的回滾(UNDO)信息,全部存放在共享表空間文件中。默認(rèn)情況下該文件位于數(shù)據(jù)庫根目錄下,文件名是ibdata1,且文件的初始大小為10M??梢允褂肕ySQL命令“showvariableslike‘innodb_data_file_path’;”查看該文件的的屬性。

2.4.6InnoDB表空間目前一百二十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)2.4.6InnoDB表空間目前一百二十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)

2.獨(dú)享表空間:如果將全局系統(tǒng)變量innodb_file_per_table的值設(shè)置為ON(innodb_file_per_table的默認(rèn)值為OFF),那么之后再創(chuàng)建InnoDB存儲引擎的新表,這些表的數(shù)據(jù)信息、索引信息都將保存到獨(dú)享表空間文件。2.4.6InnoDB表空間目前一百二十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)獨(dú)享表空間的設(shè)置2.4.6InnoDB表空間目前一百二十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)usechoose;altertablemy_tableengine=InnoDB;createtablesecond_table(todaydatetime,namechar(20));2.4.6InnoDB表空間目前一百二十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)2.4.6InnoDB表空間目前一百二十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)任務(wù)布置3:完成本書場景描述3的任務(wù)要求。2.4.6InnoDB表空間目前一百二十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)使用SQL語句droptabletable_name;即可刪除名為table_name的表。刪除表后,MySQL服務(wù)實例會自動刪除該表結(jié)構(gòu)定義文件(例如second_table.frm文件),以及數(shù)據(jù)、索引信息。該命令慎用!

2.4.7刪除表目前一百二十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)123MySQL數(shù)據(jù)庫中,變量分為系統(tǒng)變量(以@@開頭)以及用戶自定義變量(以@開頭)。查看系統(tǒng)變量的值全局系統(tǒng)變量與會話系統(tǒng)變量設(shè)置系統(tǒng)變量的值2.5系統(tǒng)變量目前一百三十頁\總數(shù)七百一十五頁\編于十五點(diǎn)每一個MySQL客戶機(jī)成功連接MySQL服務(wù)器后,都會產(chǎn)生與之對應(yīng)的會話。會話期間,MySQL服務(wù)實例會在MySQL服務(wù)器內(nèi)存中生成與該會話對應(yīng)的會話系統(tǒng)變量,這些會話系統(tǒng)變量的初始值是全局系統(tǒng)變量值的拷貝。

2.5.1全局系統(tǒng)變量與會話系統(tǒng)變量目前一百三十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)由于各會話在會話期間所做的操作不盡相同,為了標(biāo)記各個會話,會話系統(tǒng)變量又新增了12個變量。2.5.1全局系統(tǒng)變量與會話系統(tǒng)變量目前一百三十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)2.5.1全局系統(tǒng)變量與會話系統(tǒng)變量目前一百三十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)

使用“showglobalvariables;”命令即可查看MySQL服務(wù)器內(nèi)存中所有的全局系統(tǒng)變量信息(有393項之多)。使用“showsessionvariables;”命令即可查看與當(dāng)前會話相關(guān)的所有會話系統(tǒng)變量以及所有的全局系統(tǒng)變量(有405項之多),此處session關(guān)鍵字可以省略。

2.5.2查看系統(tǒng)變量的值目前一百三十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)

MySQL中有一些系統(tǒng)變量僅僅是全局系統(tǒng)變量,例如innodb_data_file_path。showglobalvariableslike'innodb_data_file_path';showsessionvariableslike'innodb_data_file_path';showvariableslike'innodb_data_file_path';2.5.2查看系統(tǒng)變量的值目前一百三十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)

MySQL中有一些系統(tǒng)變量僅僅是會話系統(tǒng)變量,例如MySQL連接ID會話系統(tǒng)變量pseudo_thread_id。showsessionvariableslike'pseudo_thread_id';showvariableslike'pseudo_thread_id';2.5.2查看系統(tǒng)變量的值目前一百三十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)MySQL中有一些系統(tǒng)變量既是全局系統(tǒng)變量,又是會話系統(tǒng)變量,例如系統(tǒng)變量character_set_client既是全局系統(tǒng)變量,又是會話系統(tǒng)變量。2.5.2查看系統(tǒng)變量的值目前一百三十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)

此時查看會話系統(tǒng)變量的方法:showsessionvariableslike'character_set_client';showvariableslike'character_set_client';此時查看全局系統(tǒng)變量的方法:

showglobalvariableslike'character_set_client';2.5.2查看系統(tǒng)變量的值目前一百三十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)作為MySQL編碼規(guī)范,MySQL中的系統(tǒng)變量以兩個“@”開頭。@@global僅僅用于標(biāo)記全局系統(tǒng)變量;@@session僅僅用于標(biāo)記會話系統(tǒng)變量;@@首先標(biāo)記會話系統(tǒng)變量,如果會話系統(tǒng)變量不存在,則標(biāo)記全局系統(tǒng)變量。

2.5.2查看系統(tǒng)變量的值目前一百三十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)任務(wù)布置4:完成本書場景描述4的任務(wù)要求。2.5.2查看系統(tǒng)變量的值目前一百四十頁\總數(shù)七百一十五頁\編于十五點(diǎn)方法一:修改MySQL源代碼,然后對MySQL源代碼重新編譯(該方法適用于MySQL高級用戶,這里不作闡述)。方法二:最為簡單的方法是通過修改MySQL配置文件,繼而修改MySQL系統(tǒng)變量的值(fai方法需要重啟MySQL服務(wù))。方法三:在MySQL服務(wù)運(yùn)行期間,使用“set”命令重新設(shè)置系統(tǒng)變量的值。

2.5.2查看系統(tǒng)變量的值目前一百四十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)設(shè)置全局系統(tǒng)變量的值的方法:set@@global.innodb_file_per_table=default;set@@global.innodb_file_per_table=ON;setglobalinnodb_file_per_table=ON;2.5.2查看系統(tǒng)變量的值目前一百四十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)

設(shè)置會話系統(tǒng)變量的值的方法:set@@session.pseudo_thread_id=5;setsessionpseudo_thread_id=5;set@@pseudo_thread_id=5;setpseudo_thread_id=5;2.5.2查看系統(tǒng)變量的值目前一百四十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)

MySQL中還有一些特殊的全局系統(tǒng)變量(例如log_bin、tmpdir、version、datadir),在MySQL服務(wù)實例運(yùn)行期間它們的值不能動態(tài)修改,不能使用“set”命令進(jìn)行重新設(shè)置,這種變量稱為靜態(tài)變量。數(shù)據(jù)庫管理員可以使用方法一或者方法二對靜態(tài)變量的值重新設(shè)置。

2.5.2查看系統(tǒng)變量的值目前一百四十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)步驟1:準(zhǔn)備工作方法一:停止MySQL服務(wù)方法二:使用MySQL命令“flushtableswithreadlock;”將服務(wù)器內(nèi)存中的數(shù)據(jù)“刷新”到數(shù)據(jù)庫文件中,同時鎖定所有表,以保證備份期間不會有新的數(shù)據(jù)寫入。2.6MySQL數(shù)據(jù)庫備份和恢復(fù)目前一百四十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)步驟2:備份文件的選取如果數(shù)據(jù)庫中全部是MyISAM存儲引擎的表,最為簡單的數(shù)據(jù)庫備份方法就是直接“備份”整個數(shù)據(jù)庫目錄。如果某個數(shù)據(jù)庫中還存在InnoDB存儲引擎的表,此時不僅需要“備份”整個數(shù)據(jù)庫目錄,還需要備份ibdata1表空間文件以及重做日志文件ib_logfile0與ib_logfile1。2.6MySQL數(shù)據(jù)庫備份和恢復(fù)目前一百四十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)步驟2:備份文件的選取數(shù)據(jù)庫備份時,建議將MySQL配置文件(例如my.ini配置文件)一并進(jìn)行備份。2.6MySQL數(shù)據(jù)庫備份和恢復(fù)目前一百四十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)步驟3:數(shù)據(jù)庫恢復(fù)首先停止MySQL服務(wù);然后將整個數(shù)據(jù)庫目錄、MySQL配置文件(例如my.ini配置文件)、ibdata1共享表空間文件以及重做日志文件ib_logfile0與ib_logfile1復(fù)制到新MySQL服務(wù)器對應(yīng)的路徑,即可恢復(fù)數(shù)據(jù)庫中的數(shù)據(jù)。2.6MySQL數(shù)據(jù)庫備份和恢復(fù)目前一百四十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)Thanks目前一百四十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)目前一百五十頁\總數(shù)七百一十五頁\編于十五點(diǎn)孔祥盛MySQL數(shù)據(jù)庫基礎(chǔ)與實例教程

之MySQL表結(jié)構(gòu)的管理目前一百五十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)123本章詳細(xì)講解“選課系統(tǒng)”數(shù)據(jù)庫各個表的實施過程,通過本章的學(xué)習(xí),讀者可以掌握表結(jié)構(gòu)管理的相關(guān)知識。

4創(chuàng)建表MySQL數(shù)據(jù)類型修改表結(jié)構(gòu)刪除表5索引內(nèi)容一覽目前一百五十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)123MySQL提供的數(shù)據(jù)類型包括數(shù)值類型(整數(shù)類型和小數(shù)類型)、字符串類型、日期類型、復(fù)合類型(復(fù)合類型包括enum類型和set類型)以及二進(jìn)制類型。MySQL小數(shù)類型MySQL整數(shù)類型MySQL字符串類型45MySQL日期類型MySQL復(fù)合類型3.1MySQL數(shù)據(jù)類型目前一百五十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)67為字段選擇合適的數(shù)據(jù)類型MySQL二進(jìn)制類型MySQL提供的數(shù)據(jù)類型包括數(shù)值類型(整數(shù)類型和小數(shù)類型)、字符串類型、日期類型、復(fù)合類型(復(fù)合類型包括enum類型和set類型)以及二進(jìn)制類型。3.1MySQL數(shù)據(jù)類型目前一百五十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)3.1.1MySQL整數(shù)類型目前一百五十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)整數(shù)類型的數(shù),默認(rèn)情況下既可以表示正整數(shù)又可以表示負(fù)整數(shù)(此時稱為有符號數(shù))。如果只希望表示零和正整數(shù),可以使用無符號關(guān)鍵字“unsigned”對整數(shù)類型進(jìn)行修飾(此時稱為無符號整數(shù))。

例如:scoretinyintunsigned3.1.1MySQL整數(shù)類型目前一百五十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)3.1.1MySQL整數(shù)類型目前一百五十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)3.1.2MySQL小數(shù)類型目前一百五十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)decimal(length,precision)用于表示精度確定(小數(shù)點(diǎn)后數(shù)字的位數(shù)確定)的小數(shù)類型,length決定了該小數(shù)的最大位數(shù),precision用于設(shè)置精度(小數(shù)點(diǎn)后數(shù)字的位數(shù))。例如:decimal(5,2)表示小數(shù)取值范圍:999.99~999.99decimal(5,0)表示:

-99999~99999的整數(shù)。3.1.2MySQL小數(shù)類型目前一百五十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)3.1.2MySQL小數(shù)類型目前一百六十頁\總數(shù)七百一十五頁\編于十五點(diǎn)字符串類型的數(shù)據(jù)外觀上使用單引號括起來,例如學(xué)生姓名'張三'、課程名'java程序設(shè)計'等。3.1.3MySQL字符串目前一百六十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)char()與varchar():例如對于簡體中文字符集gbk的字符串而言,varchar(255)表示可以存儲255個漢字,而每個漢字占用兩個字節(jié)的存儲空間。假如這個字符串沒有那么多漢字,例如僅僅包含一個‘中’字,那么varchar(255)僅僅占用1個字符(兩個字節(jié))的儲存空間;而char(255)則必須占用255個字符長度的存儲空間,哪怕里面只存儲一個漢字。3.1.3MySQL字符串類型目前一百六十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)date表示日期,默認(rèn)格式為‘YYYY-MM-DD’;time表示時間,格式為‘HH:ii:ss’;year表示年份;datetime與timestamp是日期和時間的混合類型,格式為'YYYY-MM-DDHH:ii:ss'3.1.4MySQL日期類型目前一百六十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)datetime與timestamp都是日期和時間的混合類型,區(qū)別在于:表示的取值范圍不同,datetime的取值范圍遠(yuǎn)遠(yuǎn)大于timestamp的取值范圍。將NULL插入timestamp字段后,該字段的值實際上是MySQL服務(wù)器當(dāng)前的日期和時間。同一個timestamp類型的日期或時間,不同的時區(qū),顯示結(jié)果不同。

3.1.4MySQL日期類型目前一百六十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)任務(wù)布置1:理解datetime與timestamp之間的區(qū)別。上機(jī)操作,完成本書場景描述1以及場景描述2的任務(wù)要求,理解datetime與timestamp之間的區(qū)別。學(xué)會使用now()函數(shù)。注意:now()函數(shù)用于獲得MySQL服務(wù)器的當(dāng)前時間,該時間與時區(qū)的設(shè)置密切相關(guān)。

3.1.4MySQL日期類型目前一百六十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)MySQL支持兩種復(fù)合數(shù)據(jù)類型:enum枚舉類型和set集合類型。

enum類型的字段類似于單選按鈕的功能,一個enum類型的數(shù)據(jù)最多可以包含65535個元素。

set類型的字段類似于復(fù)選框的功能,一個set類型的數(shù)據(jù)最多可以包含64個元素。3.1.5MySQL復(fù)合類型目前一百六十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)任務(wù)布置2:上機(jī)操作,完成本書場景描述3的任務(wù)要求,理解復(fù)合類型的用法。注意:MySQL模式對復(fù)合類型數(shù)據(jù)的影響。3.1.5MySQL復(fù)合類型目前一百六十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)二進(jìn)制類型的字段主要用于存儲由‘0’和‘1’組成的字符串,因此從某種意義上將,二進(jìn)制類型的數(shù)據(jù)是一種特殊格式的字符串。二進(jìn)制類型與字符串類型的區(qū)別在于:字符串類型的數(shù)據(jù)按字符為單位進(jìn)行存儲,因此存在多種字符集、多種字符序;而二進(jìn)制類型的數(shù)據(jù)按字節(jié)為單位進(jìn)行存儲,僅存在二進(jìn)制字符集binary。

3.1.6MySQL二進(jìn)制類型目前一百六十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)3.1.6MySQL二進(jìn)制類型目前一百六十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)

選擇合適的數(shù)據(jù)類型,不僅可以節(jié)省儲存空間,還可以有效地提升數(shù)據(jù)的計算性能。(1)在符合應(yīng)用要求(取值范圍、精度)的前提下,盡量使用“短”數(shù)據(jù)類型(2)數(shù)據(jù)類型越簡單越好(3)在MySQL中,應(yīng)該用內(nèi)置的日期和時間數(shù)據(jù)類型,而不是用字符串來存儲日期和時間。3.1.7選擇合適的數(shù)據(jù)類型目前一百七十頁\總數(shù)七百一十五頁\編于十五點(diǎn)(4)盡量采用精確小數(shù)類型(例如decimal),而不采用浮點(diǎn)數(shù)類型。使用精確小數(shù)類型不僅能夠保證數(shù)據(jù)計算更為精確,還可以節(jié)省儲存空間,例如百分比使用decimal(4,2)即可。(5)盡量避免NULL字段,建議將字段指定為NOTNULL約束。3.1.7選擇合適的數(shù)據(jù)類型目前一百七十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)123createtable表名(字段名1數(shù)據(jù)類型[約束條件],…[其他約束條件],[其他約束條件])其他選項(例如存儲引擎、字符集等選項)設(shè)置自增型字段設(shè)置約束其他選項的設(shè)置45創(chuàng)建“選課系統(tǒng)”數(shù)據(jù)庫表復(fù)制一個表結(jié)構(gòu)3.2創(chuàng)建表目前一百七十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)1.設(shè)置主鍵(PrimaryKey)約束(1)如果一個表的主鍵是單個字段,直接在該字段的數(shù)據(jù)類型或者其他約束條件后加上“primarykey”關(guān)鍵字,即可將該字段設(shè)置為主鍵約束,語法規(guī)則如下。字段名數(shù)據(jù)類型[其他約束條件]primarykey例如:student_nochar(11)primarykey3.2.1設(shè)置約束目前一百七十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)1.設(shè)置主鍵(PrimaryKey)約束(2)如果一個表的主鍵是多個字段的組合(例如字段名1與字段名2共同組成主鍵),定義完所有的字段后,使用下面的語法規(guī)則將(字段名1,字段名2)設(shè)置為復(fù)合主鍵。primarykey(字段名1,字段名2)3.2.1設(shè)置約束目前一百七十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)任務(wù)布置:完成本書場景描述4:查看某個表的約束條件的任務(wù)要求。注意:MySQL命令后,“\G”的作用。3.2.1設(shè)置約束目前一百七十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)默認(rèn)情況下,MySQL自增型字段的值從1開始遞增,且步長為1。設(shè)置自增型字段的語法格式如下。字段名數(shù)據(jù)類型auto_increment3.2.2設(shè)置自增型字段目前一百七十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)1.設(shè)置表的存儲引擎,語法格式如下。engine=存儲引擎類型2.設(shè)置該表的字符集,語法格式如下。defaultcharset=字符集類型3.2.3其他選項的設(shè)置目前一百七十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)3.設(shè)置索引關(guān)鍵字的壓縮方式,可以通過設(shè)置pack_keys選項實現(xiàn)(注意僅對MyISAM存儲引擎的表有效),語法格式如下。pack_keys=壓縮類型壓縮類型值為default:表示只壓縮索引中字符串類型的關(guān)鍵字(例如char、varchar、text等字段),但不壓縮數(shù)值類型的關(guān)鍵字。壓縮類型值為0:表示取消索引關(guān)鍵字的壓縮。3.2.3其他選項的設(shè)置目前一百七十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)3.設(shè)置索引關(guān)鍵字的壓縮方式壓縮類型值為1:表示壓縮索引中所有關(guān)鍵字的儲存空間,這樣做通常會使檢索速度加快,更新速度變慢。例如索引中第一個關(guān)鍵字的值為“perform”,第二關(guān)鍵字的值為“performance”,那么第二關(guān)鍵字會被存儲為“7,ance”。3.2.3其他選項的設(shè)置目前一百七十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)任務(wù)布置2:書寫本書場景描述5:創(chuàng)建“選課系統(tǒng)”數(shù)據(jù)庫表的SQL代碼,調(diào)試,并運(yùn)行。3.2.4創(chuàng)建“選課系統(tǒng)”數(shù)據(jù)庫表目前一百八十頁\總數(shù)七百一十五頁\編于十五點(diǎn)復(fù)制一個表結(jié)構(gòu)的實現(xiàn)方法有兩種。方法一:在createtable語句的末尾添加like子句,可以將源表的表結(jié)構(gòu)復(fù)制到新表中,語法格式如下。createtable新表名like源表3.2.5復(fù)制一個表結(jié)構(gòu)目前一百八十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)復(fù)制一個表結(jié)構(gòu)的實現(xiàn)方法有兩種。方法二、在createtable語句的末尾添加一個select語句,可以實現(xiàn)表結(jié)構(gòu)的復(fù)制,甚至可以將源表的表記錄拷貝到新表中。下面的語法格式將源表的表結(jié)構(gòu)以及源表的所有記錄拷貝到新表中。createtable新表名select*from源表3.2.5復(fù)制一個表結(jié)構(gòu)目前一百八十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)123成熟的數(shù)據(jù)庫設(shè)計,數(shù)據(jù)庫的表結(jié)構(gòu)一般不會發(fā)生變化。數(shù)據(jù)庫的表結(jié)構(gòu)一旦發(fā)生變化,基于該表的視圖、觸發(fā)器、存儲過程將直接受到影響,甚至導(dǎo)致應(yīng)用程序的修改。修改約束條件修改字段相關(guān)信息修改表的其他選項4修改表名3.3修改表結(jié)構(gòu)4目前一百八十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)1.刪除字段刪除表字段的語法格式如下。altertable表名drop字段名3.3.1修改字段相關(guān)信息目前一百八十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)2.添加新字段向表添加新字段時,通常需要指定新字段在表中的位置。向表添加新字段的語法格式如下。altertable表名add新字段名新數(shù)據(jù)類型[新約束條件][first|after舊字段名]3.3.1修改字段相關(guān)信息目前一百八十五頁\總數(shù)七百一十五頁\編于十五點(diǎn)3.修改字段名(或者數(shù)據(jù)類型)(1)修改表的字段名(及數(shù)據(jù)類型)的語法格式如下。altertable表名change舊字段名新字段名新數(shù)據(jù)類型3.3.1修改字段相關(guān)信息目前一百八十六頁\總數(shù)七百一十五頁\編于十五點(diǎn)3.修改字段名(或者數(shù)據(jù)類型)(2)如果僅對字段的數(shù)據(jù)類型進(jìn)行修改,可以使用下面的語法格式。altertable表名modify字段名新數(shù)據(jù)類型3.3.1修改字段相關(guān)信息目前一百八十七頁\總數(shù)七百一十五頁\編于十五點(diǎn)1.添加約束條件向表的某個字段添加約束條件的語法格式如下(其中約束類型可以是唯一性約束、主鍵約束及外鍵約束)。altertable表名addconstraint約束名約束類型(字段名)3.3.2修改約束條件目前一百八十八頁\總數(shù)七百一十五頁\編于十五點(diǎn)2.刪除約束條件(1)刪除表的主鍵約束條件語法格式比較簡單,語法格式如下。altertable表名dropprimarykey(2)刪除表的外鍵約束時,需指定外鍵約束名稱,語法格式如下(注意需指定外鍵約束名)。altertable表名dropforeignkey約束名3.3.2修改約束條件目前一百八十九頁\總數(shù)七百一十五頁\編于十五點(diǎn)2.刪除約束條件(3)若要刪除表字段的唯一性約束,實際上只需刪除該字段的唯一性索引即可,語法格式如下(注意需指定唯一性索引的索引名)。3.3.2修改約束條件目前一百九十頁\總數(shù)七百一十五頁\編于十五點(diǎn)altertable表名engine=新的存儲引擎類型altertable表名defaultcharset=新的字符集altertable表名auto_increment=新的初始值altertable表名pack_keys=新的壓縮類型

3.3.3修改表的其他選項目前一百九十一頁\總數(shù)七百一十五頁\編于十五點(diǎn)修改表名的語法格式較為簡單,語法格式如下。renametable舊表名to新表名該命令等效于:altertable舊表名rename新表名3.3.4修改表名目前一百九十二頁\總數(shù)七百一十五頁\編于十五點(diǎn)刪除表的SQL語法格式比較簡單,前面也已經(jīng)講過,這里不再贅述。這里唯一需要強(qiáng)調(diào)的是刪除表時,如果表之間存在外鍵約束關(guān)系,此時需要注意刪除表的順序。

3.4刪除表目前一百九十三頁\總數(shù)七百一十五頁\編于十五點(diǎn)123創(chuàng)建數(shù)據(jù)庫表時,初學(xué)者通常僅僅關(guān)注該表有哪些字段、字段的數(shù)據(jù)類型及約束條件等信息,數(shù)據(jù)庫表中另一個重要的概念“索引”很容易被忽視。索引關(guān)鍵字的選取原則理解索引索引與約束45創(chuàng)建索引刪除索引3.5索引目前一百九十四頁\總數(shù)七百一十五頁\編于十五點(diǎn)想象一下現(xiàn)代漢語詞典的使用方法,理解索引的重要性。1.索引的本質(zhì)是什么?2.MySQL數(shù)據(jù)庫中,數(shù)據(jù)是如何檢索的?3

溫馨提示

  • 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

提交評論