版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
MySQL數(shù)據(jù)庫(kù)基礎(chǔ)與實(shí)例教程演示文稿目前一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)優(yōu)選MySQL數(shù)據(jù)庫(kù)基礎(chǔ)與實(shí)例教程目前二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)孔祥盛MySQL數(shù)據(jù)庫(kù)基礎(chǔ)與實(shí)例教程
之?dāng)?shù)據(jù)庫(kù)設(shè)計(jì)概述目前三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)123本章拋開(kāi)MySQL講解關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的相關(guān)知識(shí),以“選課系統(tǒng)”為例,講解“選課系統(tǒng)”數(shù)據(jù)庫(kù)的設(shè)計(jì)流程。4內(nèi)容一覽數(shù)據(jù)庫(kù)設(shè)計(jì)的相關(guān)知識(shí)數(shù)據(jù)庫(kù)概述E-R圖關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)目前四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)123簡(jiǎn)單地說(shuō):數(shù)據(jù)庫(kù)(Database或DB)是存儲(chǔ)、管理數(shù)據(jù)的容器;嚴(yán)格地說(shuō):數(shù)據(jù)庫(kù)是“按照某種數(shù)據(jù)結(jié)構(gòu)對(duì)數(shù)據(jù)進(jìn)行組織、存儲(chǔ)和管理的容器”??偨Y(jié):數(shù)據(jù)永遠(yuǎn)是數(shù)據(jù)庫(kù)的核心。關(guān)系數(shù)據(jù)庫(kù)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)結(jié)構(gòu)化查詢語(yǔ)言SQL1.1數(shù)據(jù)庫(kù)概述目前五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)1.1.1關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)通過(guò)“數(shù)據(jù)庫(kù)管理系統(tǒng)”,數(shù)據(jù)庫(kù)用戶可以輕松地實(shí)現(xiàn)數(shù)據(jù)庫(kù)容器中各種數(shù)據(jù)庫(kù)對(duì)象的訪問(wèn)(增、刪、改、查等操作),并可以輕松地完成數(shù)據(jù)庫(kù)的維護(hù)工作(備份、恢復(fù)、修復(fù)等操作)目前六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)數(shù)據(jù)庫(kù)用戶無(wú)法直接通過(guò)操作系統(tǒng)獲取數(shù)據(jù)庫(kù)文件中的具體內(nèi)容;數(shù)據(jù)庫(kù)管理系統(tǒng)通過(guò)調(diào)用操作系統(tǒng)的進(jìn)程管理、內(nèi)存管理、設(shè)備管理以及文件管理等服務(wù),為數(shù)據(jù)庫(kù)用戶提供管理、控制數(shù)據(jù)庫(kù)容器中各種數(shù)據(jù)庫(kù)對(duì)象、數(shù)據(jù)庫(kù)文件的接口。1.1.1關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)目前七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)添加標(biāo)題添加標(biāo)題目前八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)層次模型面向?qū)ο竽P途W(wǎng)狀模型關(guān)系模型數(shù)據(jù)庫(kù)管理系統(tǒng)常用的數(shù)學(xué)模型
目前九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)添加標(biāo)題基于“關(guān)系模型”的數(shù)據(jù)庫(kù)管理系統(tǒng)稱為關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(簡(jiǎn)稱為RDBMS)。隨著關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的日臻完善,目前關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)已占據(jù)主導(dǎo)地位。1.1.1關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)/blog/jdd-2013-what-we-found-out-about-databases目前十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)2014年2月數(shù)據(jù)庫(kù)流行度排行榜截至目前,MySQL已經(jīng)成功逆襲!1.1.1關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)目前十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)2014年3月數(shù)據(jù)庫(kù)流行度排行榜1.1.1關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)目前十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)2014年4月數(shù)據(jù)庫(kù)流行度排行榜1.1.1關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)目前十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)開(kāi)源MySQL源代碼免費(fèi)下載簡(jiǎn)單MySQL體積小,便于安裝MySQL性能足夠與商業(yè)數(shù)據(jù)庫(kù)媲美功能強(qiáng)大MySQL提供的功能足夠與商業(yè)數(shù)據(jù)庫(kù)媲美逆襲原因性能優(yōu)越1.1.1關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)目前十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)關(guān)系數(shù)據(jù)庫(kù)中所謂的“關(guān)系”,實(shí)質(zhì)上是一張二維表。請(qǐng)看下面的課程表。字段名(列名)第1個(gè)字段(列)第1條記錄第2條記錄第3條記錄第4條記錄第5條記錄第3個(gè)字段(列)第2個(gè)字段(列)第4個(gè)字段(列)1.1.2關(guān)系數(shù)據(jù)庫(kù)目前十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)作為數(shù)據(jù)庫(kù)中最為重要的數(shù)據(jù)庫(kù)對(duì)象,數(shù)據(jù)庫(kù)表的設(shè)計(jì)過(guò)程并非一蹴而就,上述課程表根本無(wú)法滿足“選課系統(tǒng)”的功能需求。事實(shí)上,數(shù)據(jù)庫(kù)表的設(shè)計(jì)過(guò)程并非如此簡(jiǎn)單,本章的重點(diǎn)就是討論如何設(shè)計(jì)結(jié)構(gòu)良好的數(shù)據(jù)庫(kù)表。1.1.2關(guān)系數(shù)據(jù)庫(kù)目前十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)結(jié)構(gòu)化查詢語(yǔ)言(StructuredQueryLanguage或簡(jiǎn)稱為SQL)是一種應(yīng)用最為廣泛的關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言,該語(yǔ)言定義了操作關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)法,幾乎所有的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)都支持SQL。1.1.3結(jié)構(gòu)化查詢語(yǔ)言SQL目前十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)學(xué)習(xí)重點(diǎn)目前十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)123數(shù)據(jù)庫(kù)設(shè)計(jì)是一個(gè)“系統(tǒng)工程”,要求數(shù)據(jù)庫(kù)開(kāi)發(fā)人員:熟悉“商業(yè)領(lǐng)域”的商業(yè)知識(shí)。利用“管理學(xué)”的知識(shí)與其他開(kāi)發(fā)人員進(jìn)行有效溝通。掌握一些數(shù)據(jù)庫(kù)設(shè)計(jì)輔助工具。數(shù)據(jù)庫(kù)設(shè)計(jì)輔助工具商業(yè)知識(shí)和溝通技能“選課系統(tǒng)”概述45定義問(wèn)題域編碼規(guī)范1.2數(shù)據(jù)庫(kù)設(shè)計(jì)的相關(guān)知識(shí)目前十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)數(shù)據(jù)庫(kù)技術(shù)解決的是“商業(yè)領(lǐng)域”的“商業(yè)問(wèn)題”。數(shù)據(jù)庫(kù)開(kāi)發(fā)人員有必要成為該“商業(yè)領(lǐng)域”的專(zhuān)家,與其他開(kāi)發(fā)人員(包括最終用戶)一起工作,繼而使用數(shù)據(jù)庫(kù)技術(shù)解決該“商業(yè)領(lǐng)域”的“商業(yè)問(wèn)題”。1.2.1商業(yè)知識(shí)和溝通技能目前二十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)1.2.2數(shù)據(jù)庫(kù)設(shè)計(jì)輔助工具
工具模型技術(shù)業(yè)務(wù)模型面向?qū)ο蠓治龊驮O(shè)計(jì)技術(shù)結(jié)構(gòu)化分析和設(shè)計(jì)技術(shù)軟件測(cè)試技術(shù)關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)技術(shù)ErwinPowerDesignerRationalRoseVisioVC++6.0VisualstudioEclipseNetBeans單元測(cè)試工具功能測(cè)試工具性能測(cè)試工具程序流程圖DFD時(shí)序圖狀態(tài)圖CASE工具IDE工具測(cè)試工具數(shù)據(jù)模型類(lèi)圖E-R圖目前二十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)限于篇幅,在不影響“選課系統(tǒng)”核心功能的基礎(chǔ)上,適當(dāng)?shù)貙?duì)該系統(tǒng)進(jìn)行“定制”、“擴(kuò)展”以及“瘦身”。
1.2.3“選課系統(tǒng)”概述目前二十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)定義問(wèn)題域是數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程中重要的活動(dòng),它的目標(biāo)是準(zhǔn)確定義要解決的商業(yè)問(wèn)題?!斑x課系統(tǒng)”亟需解決的“商業(yè)”問(wèn)題有哪些?1.2.4定義問(wèn)題域目前二十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)在編程的時(shí)候會(huì)考慮代碼的可讀性嗎?你覺(jué)得代碼可讀性是需要考慮的問(wèn)題嗎?1.代碼不僅要自己能讀懂,還要?jiǎng)e人也能看懂?2.盡量做到可讀,但時(shí)間緊任務(wù)重的時(shí)候就顧不上了?3.代碼只要自己能讀懂就可以了?4.代碼寫(xiě)完就完了,不用管以后是否能讀懂?5.不知道,沒(méi)有想過(guò)這個(gè)問(wèn)題?1.2.5編碼規(guī)范目前二十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)請(qǐng)記住:盡最大努力把方便留給別人和將來(lái)的自己。建議大家遵循本書(shū)羅列的常用編程規(guī)范!目前二十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)123關(guān)系實(shí)體和屬性E-R圖的設(shè)計(jì)原則E-R圖設(shè)計(jì)的質(zhì)量直接決定了關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的質(zhì)量。1.3E-R圖目前二十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
實(shí)體不是某一個(gè)具體事物,而是某一種類(lèi)別所有事物的統(tǒng)稱。屬性通常用于表示實(shí)體的某種特征,也可以使用屬性表示實(shí)體間關(guān)系的特征實(shí)體屬性屬性1.3.1實(shí)體和屬性目前二十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)E-R圖中的關(guān)系用于表示實(shí)體間存在的聯(lián)系,在E-R圖中,實(shí)體間的關(guān)系通常使用一條線段表示。E-R圖中實(shí)體間的關(guān)系是雙向的。關(guān)系關(guān)系1.3.2關(guān)系目前二十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
基數(shù)表示一個(gè)實(shí)體到另一個(gè)實(shí)體之間關(guān)聯(lián)的數(shù)目,基數(shù)是針對(duì)關(guān)系之間的某個(gè)方向提出的概念,基數(shù)可以是一個(gè)取值范圍,也可以是某個(gè)具體數(shù)值基數(shù)可選基數(shù)強(qiáng)制1.3.2關(guān)系目前二十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
元表示關(guān)系所關(guān)聯(lián)的實(shí)體個(gè)數(shù)。二元關(guān)系二元關(guān)系一元關(guān)系1.3.2關(guān)系目前三十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
使用關(guān)聯(lián)(Association)表示實(shí)體間關(guān)系的屬性。關(guān)聯(lián)關(guān)聯(lián)1.3.2關(guān)系目前三十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)123實(shí)體是一個(gè)單獨(dú)的個(gè)體,不能存在于另一個(gè)實(shí)體中,成為另一個(gè)實(shí)體的屬性。屬性應(yīng)該存在于、且只存在于某一個(gè)地方(實(shí)體或者關(guān)聯(lián))。同一個(gè)實(shí)體在同一個(gè)E-R圖內(nèi),僅出現(xiàn)一次。
數(shù)據(jù)庫(kù)開(kāi)發(fā)人員通常采用“一事一地”的原則從系統(tǒng)的功能描述中抽象出來(lái)E-R圖。1.3.3E-R圖的設(shè)計(jì)原則目前三十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)1.為E-R圖中的每個(gè)實(shí)體建立一張表。2.為每張表定義一個(gè)主鍵(如果需要,可以向表添加一個(gè)沒(méi)有實(shí)際意義的字段作為該表的主鍵)3.增加外鍵表示一對(duì)多關(guān)系。4.建立新表表示多對(duì)多關(guān)系。5.為字段選擇合適的數(shù)據(jù)類(lèi)型。6.定義約束條件(如果需要)。7.評(píng)價(jià)關(guān)系的質(zhì)量,并進(jìn)行必要的改進(jìn)。1.4關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)目前三十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(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為每個(gè)實(shí)體建立一張數(shù)據(jù)庫(kù)表目前三十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)關(guān)鍵字(key):用以唯一標(biāo)識(shí)表中的每行記錄。主鍵(PrimaryKey):在所有的關(guān)鍵字中選擇一個(gè)關(guān)鍵字,作為該表的主關(guān)鍵字,簡(jiǎn)稱主鍵。1.4.2為每張表定義一個(gè)主鍵目前三十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)主鍵有以下兩個(gè)特征:(1)表的主鍵可以是一個(gè)字段,也可以是多個(gè)字段的組合(這種情況稱為復(fù)合主鍵)。(2)表中主鍵的值具有唯一性且不能取空值(NULL);當(dāng)表中的主鍵由多個(gè)字段構(gòu)成時(shí),每個(gè)字段的值都不能取NULL。主鍵設(shè)計(jì)技巧,請(qǐng)參看本書(shū)內(nèi)容。1.4.2為每張表定義一個(gè)主鍵目前三十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(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為每張表定義一個(gè)主鍵目前三十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)外鍵(ForeignKey):如果表A中的一個(gè)字段a對(duì)應(yīng)于表B的主鍵b,則字段a稱為表A的外鍵,此時(shí)存儲(chǔ)在表A中字段a的值,要么是NULL,要么是來(lái)自于表B主鍵b的值。1.4.3增加外鍵表示一對(duì)多關(guān)系目前三十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)情形一:如果實(shí)體間的關(guān)系為一對(duì)多關(guān)系,則需要將“一”端實(shí)體的主鍵放到“多”端實(shí)體中,然后作為“多”端實(shí)體的外鍵,通過(guò)該外鍵即可表示實(shí)體間的一對(duì)多關(guān)系。1.4.3增加外鍵表示一對(duì)多關(guān)系目前三十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)讓學(xué)生記住所在班級(jí),遠(yuǎn)比班級(jí)“記住”所有學(xué)生容易的多。1.4.3增加外鍵表示一對(duì)多關(guān)系目前四十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)情形二:實(shí)體間的一對(duì)一關(guān)系,可以看成一種特殊的一對(duì)多關(guān)系:將“一”端實(shí)體的主鍵放到另“一”端的實(shí)體中,并作為另“一”端的實(shí)體的外鍵,然后將外鍵定義為唯一性約束(UniqueConstraint)。1.4.3增加外鍵表示一對(duì)多關(guān)系目前四十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)PK1.4.3增加外鍵表示一對(duì)多關(guān)系目前四十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(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增加外鍵表示一對(duì)多關(guān)系目前四十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)情形三:如果兩個(gè)實(shí)體間的關(guān)系為多對(duì)多關(guān)系,則需要添加新表表示該多對(duì)多關(guān)系,然后將該關(guān)系涉及到的實(shí)體的“主鍵”分別放入到新表中(作為新表的外鍵),并將關(guān)系自身的屬性放入到新表中作為新表的字段。1.4.4建立新表表示多對(duì)多關(guān)系目前四十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(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建立新表表示多對(duì)多關(guān)系目前四十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)1.4.4建立新表表示多對(duì)多關(guān)系目前四十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)1.4.5為字段選擇合適的數(shù)據(jù)類(lèi)型目前四十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)常用的約束條件有6種:主鍵(PrimaryKey)約束外鍵(ForeignKey)約束唯一性(Unique)約束默認(rèn)值(Default)約束非空(NotNULL)約束檢查(Check)約束。1.4.6定義約束(Constraint)條件目前四十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí),有兩個(gè)不爭(zhēng)的事實(shí)。 數(shù)據(jù)庫(kù)中冗余的數(shù)據(jù)需要額外的維護(hù),因此質(zhì)量好的一套表應(yīng)該盡量“減少冗余數(shù)據(jù)”。 數(shù)據(jù)庫(kù)中經(jīng)常發(fā)生變化的數(shù)據(jù)需要額外的維護(hù),因此質(zhì)量好的一套表應(yīng)該盡量“避免數(shù)據(jù)經(jīng)常發(fā)生變化”。1.4.7評(píng)價(jià)數(shù)據(jù)庫(kù)表設(shè)計(jì)的質(zhì)量目前四十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)冗余的數(shù)據(jù)需要額外的維護(hù),并且容易導(dǎo)致“數(shù)據(jù)不一致”、“插入異?!币约啊皠h除異常”等問(wèn)題的發(fā)生。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)場(chǎng)景一:插入異常。場(chǎng)景二:修改復(fù)雜。場(chǎng)景三:刪除異常。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)規(guī)范化是通過(guò)最小化數(shù)據(jù)冗余來(lái)提升數(shù)據(jù)庫(kù)設(shè)計(jì)質(zhì)量的過(guò)程,規(guī)范化是基于函數(shù)依賴以及一系列范式定義的,最為常用的是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)函數(shù)依賴:一張表內(nèi)兩個(gè)字段值之間的一一對(duì)應(yīng)關(guān)系稱為函數(shù)依賴。第一范式:如果一張表內(nèi)同類(lèi)字段不重復(fù)出現(xiàn),該表就滿足第一范式的要求。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)第一范式1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)第二范式:一張表在滿足第一范式的基礎(chǔ)上,如果每個(gè)“非關(guān)鍵字”字段“僅僅”函數(shù)依賴于主鍵,那么該表滿足第二范式的要求。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)第二范式1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)第三范式:如果一張表滿足第二范式的要求,并且不存在“非關(guān)鍵字”字段函數(shù)依賴于任何其他“非關(guān)鍵字”字段,那么該表滿足第三范式的要求。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)第三范式1.4.8使用規(guī)范化減少數(shù)據(jù)冗余目前五十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)統(tǒng)計(jì)學(xué)生的個(gè)人資料時(shí),如果讀者是一名數(shù)據(jù)庫(kù)開(kāi)發(fā)人員,應(yīng)該讓學(xué)生上報(bào)年齡信息,還是讓學(xué)生上報(bào)出生日期?如何確保每一門(mén)課程選報(bào)學(xué)生的人數(shù),不超過(guò)人數(shù)上限?1.4.9避免數(shù)據(jù)經(jīng)常發(fā)生變化目前五十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)方案一:course(course_no,course_no,course_name,up_limit,description,status,teacher_no,available)方案二:數(shù)據(jù)庫(kù)表無(wú)需進(jìn)行任何更改。1.4.9避免數(shù)據(jù)經(jīng)常發(fā)生變化目前六十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)任務(wù)1:描述“選課系統(tǒng)”的問(wèn)題域。任務(wù)2:將本書(shū)圖1-7中“團(tuán)購(gòu)網(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ù)布置目前六十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)Thanks目前六十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)目前六十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)孔祥盛MySQL數(shù)據(jù)庫(kù)基礎(chǔ)與實(shí)例教程
之MySQL基礎(chǔ)知識(shí)目前六十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)123通過(guò)本章的學(xué)習(xí),讀者可以掌握一些常用的MySQL命令,從而對(duì)MySQL數(shù)據(jù)庫(kù)進(jìn)行一些簡(jiǎn)單的管理。本章知識(shí)點(diǎn)較為繁雜,希望保持一份兒耐心。4字符集以及字符序設(shè)置MySQL概述MySQL數(shù)據(jù)庫(kù)管理MySQL表管理5系統(tǒng)變量?jī)?nèi)容一覽目前六十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)123MySQL由瑞典MySQLAB公司開(kāi)發(fā)。2008年1月MySQL被美國(guó)的SUN公司收購(gòu)。2009年4月SUN公司又被美國(guó)的甲骨文(Oracle)公司收購(gòu)。MySQL服務(wù)的安裝MySQL的特點(diǎn)MySQL服務(wù)的配置45啟動(dòng)與停止MySQL服務(wù)MySQL配置文件2.1MySQL概述目前六十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)67MySQL由瑞典MySQLAB公司開(kāi)發(fā)。2008年1月MySQL被美國(guó)的SUN公司收購(gòu)。2009年4月SUN公司又被美國(guó)的甲骨文(Oracle)公司收購(gòu)。連接MySQL服務(wù)器關(guān)系數(shù)據(jù)庫(kù)MySQL客戶機(jī)2.1MySQL概述目前六十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
MySQL是一個(gè)單進(jìn)程多線程、支持多用戶、基于客戶機(jī)/服務(wù)器(Client/Server簡(jiǎn)稱C/S)的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。性能高效跨平臺(tái)支持簡(jiǎn)單易用開(kāi)源支持多用戶2.1.1MySQL特點(diǎn)目前六十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)MySQL的使用流程
2.1.1MySQL特點(diǎn)目前六十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)MySQL其他概念(請(qǐng)參看本書(shū)內(nèi)容):MySQL服務(wù)MySQL服務(wù)實(shí)例MySQL服務(wù)器端口號(hào)2.1.1MySQL特點(diǎn)目前七十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)MySQL服務(wù)的安裝(請(qǐng)參看本書(shū)內(nèi)容)。建議自學(xué),并上機(jī)操作。注意:本書(shū)使用的MySQL為5.6版本。可以到本書(shū)指定的網(wǎng)址下載MySQL圖形化安裝包mysql-5.6.5-m8-win32.msi。
2.1.2MySQL服務(wù)的安裝目前七十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)MySQL服務(wù)的配置(請(qǐng)參看本書(shū)內(nèi)容)。建議自學(xué),并上機(jī)操作。配置過(guò)程中的其他知識(shí)點(diǎn):OLAP與OLTP
EnableStrictMode選項(xiàng)字符集/字符序MySQL超級(jí)管理員root賬戶my.ini配置文件中2.1.3MySQL服務(wù)的配置目前七十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)MySQL服務(wù)的啟動(dòng)與停止(請(qǐng)參看本書(shū)內(nèi)容)。建議自學(xué),并上機(jī)操作。2.1.4啟動(dòng)與停止MySQL服務(wù)目前七十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)my.ini配置文件包含了多種參數(shù)選項(xiàng)組,每個(gè)參數(shù)選項(xiàng)組通過(guò)“[]”指定,每個(gè)參數(shù)選項(xiàng)組可以配置多個(gè)參數(shù)信息。通常情況下,每個(gè)參數(shù)遵循“參數(shù)名=參數(shù)值”這種配置格式,參數(shù)名一般是小寫(xiě)字母,參數(shù)名大小寫(xiě)敏感。常用的參數(shù)選項(xiàng)組有“[client]”、“[mysql]”以及“[mysqld]”參數(shù)選項(xiàng)組。2.1.5MySQL配置文件目前七十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)[client]參數(shù)選項(xiàng)組:配置了MySQL自帶的MySQL5.6命令行窗口可以讀取的參數(shù)信息。
常用的參數(shù)是port(默認(rèn)值是3306)。修改該port值會(huì)導(dǎo)致新打開(kāi)的MySQL5.6命令行窗口無(wú)法連接MySQL服務(wù)器。2.1.5MySQL配置文件目前七十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)[mysql]參數(shù)選項(xiàng)組:配置了MySQL客戶機(jī)程序mysql.exe可以讀取的參數(shù)信息。
常用的參數(shù)有“prompt”、“default-character-set=gbk”。
修改“[mysql]”參數(shù)選項(xiàng)組中的參數(shù)值,將直接影響新打開(kāi)的MySQL客戶機(jī)。2.1.5MySQL配置文件目前七十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)[mysqld]參數(shù)選項(xiàng)組:配置了MySQL服務(wù)程序mysqld.exe可以讀取的參數(shù)信息,mysqld.exe啟動(dòng)時(shí),將[mysqld]參數(shù)選項(xiàng)組的參數(shù)信息加載到服務(wù)器內(nèi)存,繼而生成MySQL服務(wù)實(shí)例。2.1.5MySQL配置文件目前七十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)[mysqld]參數(shù)選項(xiàng)組:常用的參數(shù)有“port”、“basedir”、“datadir”、“character-set-server”、“sql_mode”、“max_connections”以及“default_storage_engine”等。2.1.5MySQL配置文件目前七十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)[mysqld]參數(shù)選項(xiàng)組:修改“[mysqld]”參數(shù)選項(xiàng)組的參數(shù)值,只有重新啟動(dòng)MySQL服務(wù),將修改后的配置文件參數(shù)信息加載到服務(wù)器內(nèi)存后,新配置文件才會(huì)在新的MySQL服務(wù)實(shí)例中生效。
如果“[mysqld]”參數(shù)選項(xiàng)組的參數(shù)信息出現(xiàn)錯(cuò)誤,將會(huì)導(dǎo)致MySQL服務(wù)無(wú)法啟動(dòng)。2.1.5MySQL配置文件目前七十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)MySQL客戶機(jī)(本書(shū)使用前兩個(gè)):
MySQL5.6命令行窗口
CMD命令提示符窗口
WEB瀏覽器(例如phpMyAdmin)第三方客戶機(jī)程序(例如MySQL-Front、MySQL
ManagerforMySQL等)2.1.6MySQL客戶機(jī)目前八十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)phpMyAdmin2.1.6MySQL客戶機(jī)目前八十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)MySQL-Front2.1.6MySQL客戶機(jī)目前八十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)MySQL
ManagerforMySQL2.1.6MySQL客戶機(jī)目前八十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)2.1.6MySQL客戶機(jī)HeidiSQL目前八十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)MySQL客戶機(jī)連接MySQL服務(wù)器須提供:合法的登錄主機(jī):解決“from”的問(wèn)題。
合法的賬戶名以及密碼:解決“who”的問(wèn)題。MySQL服務(wù)器主機(jī)名(或IP地址):解決“to”的問(wèn)題。
端口號(hào):解決“多卡多待”的問(wèn)題。MySQL客戶機(jī)與MySQL服務(wù)器是同一臺(tái)主機(jī)時(shí),主機(jī)名可以使用localhost(或者)。2.1.7連接MySQL服務(wù)器目前八十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)當(dāng)MySQL客戶機(jī)與MySQL服務(wù)器是同一臺(tái)主機(jī)時(shí),打開(kāi)命令提示符窗口,輸入mysql-h-P3306-uroot–proot或者mysql-hlocalhost-P3306-uroot–proot然后回車(chē)(注意-p后面緊跟密碼root),即可實(shí)現(xiàn)本地MySQL客戶機(jī)與本地MySQL服務(wù)器之間的成功連接。2.1.7連接MySQL服務(wù)器目前八十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)2.1.7連接MySQL服務(wù)器目前八十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)123MySQL由瑞典MySQLAB公司開(kāi)發(fā),默認(rèn)情況下MySQL使用的是latin1字符集。由此可能導(dǎo)致MySQL數(shù)據(jù)庫(kù)不夠支持中文字符串查詢或者發(fā)生中文字符串亂碼等問(wèn)題。
MySQL字符集與字符序字符集及字符序概念MySQL的字符集轉(zhuǎn)換過(guò)程45MySQL字符集的設(shè)置SQL腳本文件2.2字符集以及字符序設(shè)置目前八十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)字符(Character)是人類(lèi)語(yǔ)言最小的表義符號(hào),例如‘A’、‘B’等。給定一系列字符,對(duì)每個(gè)字符賦予一個(gè)數(shù)值,用數(shù)值來(lái)代表對(duì)應(yīng)的字符,這個(gè)數(shù)值就是字符的編碼(CharacterEncoding)。給定一系列字符并賦予對(duì)應(yīng)的編碼后,所有這些“字符和編碼對(duì)”組成的集合就是字符集(CharacterSet)。
2.2.1字符集及字符序概念目前八十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)2.2.1字符集及字符序概念目前九十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)字符序(Collation)是指在同一字符集內(nèi)字符之間的比較規(guī)則。一個(gè)字符集包含多種字符序,每個(gè)字符序唯一對(duì)應(yīng)一種字符集。MySQL字符序命名規(guī)則是:以字符序?qū)?yīng)的字符集名稱開(kāi)頭,以國(guó)家名居中(或以general居中),以ci、cs或bin結(jié)尾。ci表示大小寫(xiě)不敏感,cs表示大小寫(xiě)敏感,bin表示按二進(jìn)制編碼值比較。2.2.1字符集及字符序概念目前九十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)使用MySQL命令showcharacterset;即可查看當(dāng)前MySQL服務(wù)實(shí)例支持的字符集、字符集默認(rèn)的字符序以及字符集占用的最大字節(jié)長(zhǎng)度等信息latin1支持西歐字符、希臘字符等gbk支持中文簡(jiǎn)體字符big5支持中文繁體字符utf8幾乎支持世界所有國(guó)家的字符。2.2.2MySQL字符集及字符序目前九十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)使用MySQL命令showvariableslike'character%';即可查看當(dāng)前MySQL服務(wù)實(shí)例使用的字符集。2.2.2MySQL字符集及字符序目前九十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
character_set_client:MySQL客戶機(jī)字符集。character_set_connection:數(shù)據(jù)通信鏈路字符集,當(dāng)MySQL客戶機(jī)向服務(wù)器發(fā)送請(qǐng)求時(shí),請(qǐng)求數(shù)據(jù)以該字符集進(jìn)行編碼。character_set_database:數(shù)據(jù)庫(kù)字符集。character_set_filesystem:MySQL服務(wù)器文件系統(tǒng)字符集,該值是固定的binary。2.2.2MySQL字符集及字符序目前九十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)character_set_results:結(jié)果集的字符集,MySQL服務(wù)器向MySQL客戶機(jī)返回執(zhí)行結(jié)果時(shí),執(zhí)行結(jié)果以該字符集進(jìn)行編碼。character_set_server:MySQL服務(wù)實(shí)例字符集。character_set_system:元數(shù)據(jù)(字段名、表名、數(shù)據(jù)庫(kù)名等)的字符集,默認(rèn)值為utf8。2.2.2MySQL字符集及字符序目前九十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)使用MySQL命令“showcollation;”即可查看當(dāng)前MySQL服務(wù)實(shí)例支持的字符序。2.2.2MySQL字符集及字符序目前九十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)2.2.3MySQL字符集的轉(zhuǎn)換過(guò)程目前九十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)方法1:修改my.ini配置文件,可修改MySQL默認(rèn)的字符集。方法2:MySQL提供下列MySQL命令可以“臨時(shí)地”修改MySQL“當(dāng)前會(huì)話的”字符集以及字符序。2.2.4MySQL字符集的設(shè)置目前九十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(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è)置目前九十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)方法3:使用MySQL命令“setnamesgbk;”可以“臨時(shí)一次性地”設(shè)置character_set_client、character_set_connection以及character_set_results的字符集為gbk方法4:連接MySQL服務(wù)器時(shí)指定字符集mysql--default-character-set=字符集
-h服務(wù)器IP地址-u賬戶名–p密碼2.2.4MySQL字符集的設(shè)置目前一百頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)SQL基本的執(zhí)行方法(兩種):
\.C:\mysql\init.sqlsourceC:\mysql\init.sql2.2.5SQL腳本文件目前一百零一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)123
數(shù)據(jù)庫(kù)是存儲(chǔ)數(shù)據(jù)庫(kù)對(duì)象的容器。MySQL數(shù)據(jù)庫(kù)的管理主要包括數(shù)據(jù)庫(kù)的創(chuàng)建、選擇當(dāng)前操作的數(shù)據(jù)庫(kù)、顯示數(shù)據(jù)庫(kù)結(jié)構(gòu)以及刪除數(shù)據(jù)庫(kù)等操作
。查看數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)庫(kù)顯示數(shù)據(jù)庫(kù)結(jié)構(gòu)45選擇當(dāng)前操作的數(shù)據(jù)庫(kù)刪除數(shù)據(jù)庫(kù)2.3MySQL數(shù)據(jù)庫(kù)管理目前一百零二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
createdatabasechoose;成功創(chuàng)建choose數(shù)據(jù)庫(kù)后,數(shù)據(jù)庫(kù)根目錄下會(huì)自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)目錄。2.3.1創(chuàng)建數(shù)據(jù)庫(kù)目前一百零三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
使用MySQL命令showdatabases;即可查看MySQL服務(wù)實(shí)例上所有的數(shù)據(jù)庫(kù)
2.3.2查看數(shù)據(jù)庫(kù)目前一百零四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
使用MySQL命令showcreatedatabasechoose;可以查看choose數(shù)據(jù)庫(kù)的相關(guān)信息(例如MySQL版本ID號(hào)、默認(rèn)字符集等信息)。2.3.3顯示數(shù)據(jù)庫(kù)結(jié)構(gòu)目前一百零五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
執(zhí)行“usechoose;”命令后,后續(xù)的MySQL命令以及SQL語(yǔ)句將自動(dòng)操作choose數(shù)據(jù)庫(kù)中所有數(shù)據(jù)庫(kù)對(duì)象。2.3.4選擇當(dāng)前操作的數(shù)據(jù)庫(kù)目前一百零六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)刪除student數(shù)據(jù)庫(kù),使用SQL語(yǔ)句dropdatabasestudent;2.3.5刪除數(shù)據(jù)庫(kù)目前一百零七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)123表是數(shù)據(jù)庫(kù)中最為重要的數(shù)據(jù)庫(kù)對(duì)象
設(shè)置默認(rèn)的存儲(chǔ)引擎MyISAM和InnoDB存儲(chǔ)引擎創(chuàng)建數(shù)據(jù)庫(kù)表45顯示表結(jié)構(gòu)表記錄的管理2.4MySQL表管理目前一百零八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)67表是數(shù)據(jù)庫(kù)中最為重要的數(shù)據(jù)庫(kù)對(duì)象
刪除表InnoDB表空間2.4MySQL表管理目前一百零九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)MySQL提供了插件式(Pluggable)的存儲(chǔ)引擎,存儲(chǔ)引擎是基于表的,同一個(gè)數(shù)據(jù)庫(kù),不同的表,存儲(chǔ)引擎可以不同。甚至同一個(gè)數(shù)據(jù)庫(kù)表,在不同的場(chǎng)合可以應(yīng)用不同的存儲(chǔ)引擎。
2.4.1MyISAM和InnoDB存儲(chǔ)引擎目前一百一十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)使用MySQL命令“showengines;”,即可查看MySQL服務(wù)實(shí)例支持的存儲(chǔ)引擎。2.4.1MyISAM和InnoDB存儲(chǔ)引擎目前一百一十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)1.InnoDB存儲(chǔ)引擎的特點(diǎn)支持外鍵(ForeignKey)支持事務(wù)(Transaction):如果某張表主要提供OLTP支持,需要執(zhí)行大量的增、刪、改操作(insert、delete、update語(yǔ)句),出于事務(wù)安全方面的考慮,InnoDB存儲(chǔ)引擎是更好的選擇。最新版本的MySQL已經(jīng)開(kāi)始支持全文檢索。2.4.1MyISAM和InnoDB存儲(chǔ)引擎目前一百一十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)2.MyISAM存儲(chǔ)引擎的特點(diǎn)MyISAM具有檢查和修復(fù)表的大多數(shù)工具。MyISAM表可以被壓縮
MyISAM表最早支持全文索引
但MyISAM表不支持事務(wù)
但MyISAM表不支持外鍵(ForeignKey)。如果需要執(zhí)行大量的select語(yǔ)句,出于性能方面的考慮,MyISAM存儲(chǔ)引擎是更好的選擇。2.4.1MyISAM和InnoDB存儲(chǔ)引擎目前一百一十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)MySQL5.6默認(rèn)的默認(rèn)的存儲(chǔ)引擎是InnoDB。使用MySQL命令setdefault_storage_engine=MyISAM;可以“臨時(shí)地”將MySQL“當(dāng)前會(huì)話的”存儲(chǔ)引擎設(shè)置為MyISAM,使用MySQL命令“showengines;”可以查看當(dāng)前MySQL服務(wù)實(shí)例默認(rèn)的存儲(chǔ)引擎。2.4.2設(shè)置默認(rèn)的存儲(chǔ)引擎目前一百一十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)使用SQL語(yǔ)句“createtable表名”即可創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)表。例如:
usechoose;setdefault_storage_engine=InnoDB;createtablemy_table(todaydatetime,namechar(20));2.4.3創(chuàng)建數(shù)據(jù)庫(kù)表目前一百一十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)成功創(chuàng)建InnoDB存儲(chǔ)引擎的my_table表后,MySQL服務(wù)實(shí)例會(huì)在數(shù)據(jù)庫(kù)目錄choose中自動(dòng)創(chuàng)建一個(gè)名字為表名、后綴名為frm的文件。my_table.frm。2.4.3創(chuàng)建數(shù)據(jù)庫(kù)表目前一百一十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)將my_table表的存儲(chǔ)引擎修改為MyISAM。usechoose;altertablemy_tableengine=MyISAM;2.4.3創(chuàng)建數(shù)據(jù)庫(kù)表目前一百一十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)使用MySQL命令“destable_name;”即可查看表名為table_name的表結(jié)構(gòu)。2.4.4顯示表結(jié)構(gòu)目前一百一十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)使用MySQL命令“showcreatetabletable_name;”,查看名為table_name表的詳細(xì)信息。2.4.4顯示表結(jié)構(gòu)目前一百一十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)usechoose;insertintomy_tablevalues(now(),'a');insertintomy_tablevalues(now(),'a');insertintomy_tablevalues(now(),NULL);insertintomy_tablevalues(now(),'');select*frommy_table;
2.4.5表記錄的管理目前一百二十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)任務(wù)布置1:完成本書(shū)場(chǎng)景描述1:MyISAM表記錄的管理的任務(wù)要求。任務(wù)布置2:完成本書(shū)場(chǎng)景描述2:InnoDB表記錄的管理的任務(wù)要求。2.4.5表記錄的管理目前一百二十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
1.共享表空間:MySQL服務(wù)實(shí)例承載的所有數(shù)據(jù)庫(kù)的所有InnoDB表的數(shù)據(jù)信息、索引信息、各種元數(shù)據(jù)信息以及事務(wù)的回滾(UNDO)信息,全部存放在共享表空間文件中。默認(rèn)情況下該文件位于數(shù)據(jù)庫(kù)根目錄下,文件名是ibdata1,且文件的初始大小為10M??梢允褂肕ySQL命令“showvariableslike‘innodb_data_file_path’;”查看該文件的的屬性。
2.4.6InnoDB表空間目前一百二十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)2.4.6InnoDB表空間目前一百二十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
2.獨(dú)享表空間:如果將全局系統(tǒng)變量innodb_file_per_table的值設(shè)置為ON(innodb_file_per_table的默認(rèn)值為OFF),那么之后再創(chuàng)建InnoDB存儲(chǔ)引擎的新表,這些表的數(shù)據(jù)信息、索引信息都將保存到獨(dú)享表空間文件。2.4.6InnoDB表空間目前一百二十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)獨(dú)享表空間的設(shè)置2.4.6InnoDB表空間目前一百二十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)usechoose;altertablemy_tableengine=InnoDB;createtablesecond_table(todaydatetime,namechar(20));2.4.6InnoDB表空間目前一百二十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)2.4.6InnoDB表空間目前一百二十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)任務(wù)布置3:完成本書(shū)場(chǎng)景描述3的任務(wù)要求。2.4.6InnoDB表空間目前一百二十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)使用SQL語(yǔ)句droptabletable_name;即可刪除名為table_name的表。刪除表后,MySQL服務(wù)實(shí)例會(huì)自動(dòng)刪除該表結(jié)構(gòu)定義文件(例如second_table.frm文件),以及數(shù)據(jù)、索引信息。該命令慎用!
2.4.7刪除表目前一百二十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)123MySQL數(shù)據(jù)庫(kù)中,變量分為系統(tǒng)變量(以@@開(kāi)頭)以及用戶自定義變量(以@開(kāi)頭)。查看系統(tǒng)變量的值全局系統(tǒng)變量與會(huì)話系統(tǒng)變量設(shè)置系統(tǒng)變量的值2.5系統(tǒng)變量目前一百三十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)每一個(gè)MySQL客戶機(jī)成功連接MySQL服務(wù)器后,都會(huì)產(chǎn)生與之對(duì)應(yīng)的會(huì)話。會(huì)話期間,MySQL服務(wù)實(shí)例會(huì)在MySQL服務(wù)器內(nèi)存中生成與該會(huì)話對(duì)應(yīng)的會(huì)話系統(tǒng)變量,這些會(huì)話系統(tǒng)變量的初始值是全局系統(tǒng)變量值的拷貝。
2.5.1全局系統(tǒng)變量與會(huì)話系統(tǒng)變量目前一百三十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)由于各會(huì)話在會(huì)話期間所做的操作不盡相同,為了標(biāo)記各個(gè)會(huì)話,會(huì)話系統(tǒng)變量又新增了12個(gè)變量。2.5.1全局系統(tǒng)變量與會(huì)話系統(tǒng)變量目前一百三十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)2.5.1全局系統(tǒng)變量與會(huì)話系統(tǒng)變量目前一百三十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
使用“showglobalvariables;”命令即可查看MySQL服務(wù)器內(nèi)存中所有的全局系統(tǒng)變量信息(有393項(xiàng)之多)。使用“showsessionvariables;”命令即可查看與當(dāng)前會(huì)話相關(guān)的所有會(huì)話系統(tǒng)變量以及所有的全局系統(tǒng)變量(有405項(xiàng)之多),此處session關(guān)鍵字可以省略。
2.5.2查看系統(tǒng)變量的值目前一百三十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
MySQL中有一些系統(tǒng)變量?jī)H僅是全局系統(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)變量的值目前一百三十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
MySQL中有一些系統(tǒng)變量?jī)H僅是會(huì)話系統(tǒng)變量,例如MySQL連接ID會(huì)話系統(tǒng)變量pseudo_thread_id。showsessionvariableslike'pseudo_thread_id';showvariableslike'pseudo_thread_id';2.5.2查看系統(tǒng)變量的值目前一百三十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)MySQL中有一些系統(tǒng)變量既是全局系統(tǒng)變量,又是會(huì)話系統(tǒng)變量,例如系統(tǒng)變量character_set_client既是全局系統(tǒng)變量,又是會(huì)話系統(tǒng)變量。2.5.2查看系統(tǒng)變量的值目前一百三十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
此時(shí)查看會(huì)話系統(tǒng)變量的方法:showsessionvariableslike'character_set_client';showvariableslike'character_set_client';此時(shí)查看全局系統(tǒng)變量的方法:
showglobalvariableslike'character_set_client';2.5.2查看系統(tǒng)變量的值目前一百三十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)作為MySQL編碼規(guī)范,MySQL中的系統(tǒng)變量以兩個(gè)“@”開(kāi)頭。@@global僅僅用于標(biāo)記全局系統(tǒng)變量;@@session僅僅用于標(biāo)記會(huì)話系統(tǒng)變量;@@首先標(biāo)記會(huì)話系統(tǒng)變量,如果會(huì)話系統(tǒng)變量不存在,則標(biāo)記全局系統(tǒng)變量。
2.5.2查看系統(tǒng)變量的值目前一百三十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)任務(wù)布置4:完成本書(shū)場(chǎng)景描述4的任務(wù)要求。2.5.2查看系統(tǒng)變量的值目前一百四十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)方法一:修改MySQL源代碼,然后對(duì)MySQL源代碼重新編譯(該方法適用于MySQL高級(jí)用戶,這里不作闡述)。方法二:最為簡(jiǎn)單的方法是通過(guò)修改MySQL配置文件,繼而修改MySQL系統(tǒng)變量的值(fai方法需要重啟MySQL服務(wù))。方法三:在MySQL服務(wù)運(yùn)行期間,使用“set”命令重新設(shè)置系統(tǒng)變量的值。
2.5.2查看系統(tǒng)變量的值目前一百四十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(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)變量的值目前一百四十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
設(shè)置會(huì)話系統(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)變量的值目前一百四十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
MySQL中還有一些特殊的全局系統(tǒng)變量(例如log_bin、tmpdir、version、datadir),在MySQL服務(wù)實(shí)例運(yùn)行期間它們的值不能動(dòng)態(tài)修改,不能使用“set”命令進(jìn)行重新設(shè)置,這種變量稱為靜態(tài)變量。數(shù)據(jù)庫(kù)管理員可以使用方法一或者方法二對(duì)靜態(tài)變量的值重新設(shè)置。
2.5.2查看系統(tǒng)變量的值目前一百四十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)步驟1:準(zhǔn)備工作方法一:停止MySQL服務(wù)方法二:使用MySQL命令“flushtableswithreadlock;”將服務(wù)器內(nèi)存中的數(shù)據(jù)“刷新”到數(shù)據(jù)庫(kù)文件中,同時(shí)鎖定所有表,以保證備份期間不會(huì)有新的數(shù)據(jù)寫(xiě)入。2.6MySQL數(shù)據(jù)庫(kù)備份和恢復(fù)目前一百四十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)步驟2:備份文件的選取如果數(shù)據(jù)庫(kù)中全部是MyISAM存儲(chǔ)引擎的表,最為簡(jiǎn)單的數(shù)據(jù)庫(kù)備份方法就是直接“備份”整個(gè)數(shù)據(jù)庫(kù)目錄。如果某個(gè)數(shù)據(jù)庫(kù)中還存在InnoDB存儲(chǔ)引擎的表,此時(shí)不僅需要“備份”整個(gè)數(shù)據(jù)庫(kù)目錄,還需要備份ibdata1表空間文件以及重做日志文件ib_logfile0與ib_logfile1。2.6MySQL數(shù)據(jù)庫(kù)備份和恢復(fù)目前一百四十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)步驟2:備份文件的選取數(shù)據(jù)庫(kù)備份時(shí),建議將MySQL配置文件(例如my.ini配置文件)一并進(jìn)行備份。2.6MySQL數(shù)據(jù)庫(kù)備份和恢復(fù)目前一百四十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)步驟3:數(shù)據(jù)庫(kù)恢復(fù)首先停止MySQL服務(wù);然后將整個(gè)數(shù)據(jù)庫(kù)目錄、MySQL配置文件(例如my.ini配置文件)、ibdata1共享表空間文件以及重做日志文件ib_logfile0與ib_logfile1復(fù)制到新MySQL服務(wù)器對(duì)應(yīng)的路徑,即可恢復(fù)數(shù)據(jù)庫(kù)中的數(shù)據(jù)。2.6MySQL數(shù)據(jù)庫(kù)備份和恢復(fù)目前一百四十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)Thanks目前一百四十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)目前一百五十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)孔祥盛MySQL數(shù)據(jù)庫(kù)基礎(chǔ)與實(shí)例教程
之MySQL表結(jié)構(gòu)的管理目前一百五十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)123本章詳細(xì)講解“選課系統(tǒng)”數(shù)據(jù)庫(kù)各個(gè)表的實(shí)施過(guò)程,通過(guò)本章的學(xué)習(xí),讀者可以掌握表結(jié)構(gòu)管理的相關(guān)知識(shí)。
4創(chuàng)建表MySQL數(shù)據(jù)類(lèi)型修改表結(jié)構(gòu)刪除表5索引內(nèi)容一覽目前一百五十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)123MySQL提供的數(shù)據(jù)類(lèi)型包括數(shù)值類(lèi)型(整數(shù)類(lèi)型和小數(shù)類(lèi)型)、字符串類(lèi)型、日期類(lèi)型、復(fù)合類(lèi)型(復(fù)合類(lèi)型包括enum類(lèi)型和set類(lèi)型)以及二進(jìn)制類(lèi)型。MySQL小數(shù)類(lèi)型MySQL整數(shù)類(lèi)型MySQL字符串類(lèi)型45MySQL日期類(lèi)型MySQL復(fù)合類(lèi)型3.1MySQL數(shù)據(jù)類(lèi)型目前一百五十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)67為字段選擇合適的數(shù)據(jù)類(lèi)型MySQL二進(jìn)制類(lèi)型MySQL提供的數(shù)據(jù)類(lèi)型包括數(shù)值類(lèi)型(整數(shù)類(lèi)型和小數(shù)類(lèi)型)、字符串類(lèi)型、日期類(lèi)型、復(fù)合類(lèi)型(復(fù)合類(lèi)型包括enum類(lèi)型和set類(lèi)型)以及二進(jìn)制類(lèi)型。3.1MySQL數(shù)據(jù)類(lèi)型目前一百五十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)3.1.1MySQL整數(shù)類(lèi)型目前一百五十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)整數(shù)類(lèi)型的數(shù),默認(rèn)情況下既可以表示正整數(shù)又可以表示負(fù)整數(shù)(此時(shí)稱為有符號(hào)數(shù))。如果只希望表示零和正整數(shù),可以使用無(wú)符號(hào)關(guān)鍵字“unsigned”對(duì)整數(shù)類(lèi)型進(jìn)行修飾(此時(shí)稱為無(wú)符號(hào)整數(shù))。
例如:scoretinyintunsigned3.1.1MySQL整數(shù)類(lèi)型目前一百五十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)3.1.1MySQL整數(shù)類(lèi)型目前一百五十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)3.1.2MySQL小數(shù)類(lèi)型目前一百五十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)decimal(length,precision)用于表示精度確定(小數(shù)點(diǎn)后數(shù)字的位數(shù)確定)的小數(shù)類(lèi)型,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ù)類(lèi)型目前一百五十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)3.1.2MySQL小數(shù)類(lèi)型目前一百六十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)字符串類(lèi)型的數(shù)據(jù)外觀上使用單引號(hào)括起來(lái),例如學(xué)生姓名'張三'、課程名'java程序設(shè)計(jì)'等。3.1.3MySQL字符串目前一百六十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)char()與varchar():例如對(duì)于簡(jiǎn)體中文字符集gbk的字符串而言,varchar(255)表示可以存儲(chǔ)255個(gè)漢字,而每個(gè)漢字占用兩個(gè)字節(jié)的存儲(chǔ)空間。假如這個(gè)字符串沒(méi)有那么多漢字,例如僅僅包含一個(gè)‘中’字,那么varchar(255)僅僅占用1個(gè)字符(兩個(gè)字節(jié))的儲(chǔ)存空間;而char(255)則必須占用255個(gè)字符長(zhǎng)度的存儲(chǔ)空間,哪怕里面只存儲(chǔ)一個(gè)漢字。3.1.3MySQL字符串類(lèi)型目前一百六十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)date表示日期,默認(rèn)格式為‘YYYY-MM-DD’;time表示時(shí)間,格式為‘HH:ii:ss’;year表示年份;datetime與timestamp是日期和時(shí)間的混合類(lèi)型,格式為'YYYY-MM-DDHH:ii:ss'3.1.4MySQL日期類(lèi)型目前一百六十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)datetime與timestamp都是日期和時(shí)間的混合類(lèi)型,區(qū)別在于:表示的取值范圍不同,datetime的取值范圍遠(yuǎn)遠(yuǎn)大于timestamp的取值范圍。將NULL插入timestamp字段后,該字段的值實(shí)際上是MySQL服務(wù)器當(dāng)前的日期和時(shí)間。同一個(gè)timestamp類(lèi)型的日期或時(shí)間,不同的時(shí)區(qū),顯示結(jié)果不同。
3.1.4MySQL日期類(lèi)型目前一百六十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)任務(wù)布置1:理解datetime與timestamp之間的區(qū)別。上機(jī)操作,完成本書(shū)場(chǎng)景描述1以及場(chǎng)景描述2的任務(wù)要求,理解datetime與timestamp之間的區(qū)別。學(xué)會(huì)使用now()函數(shù)。注意:now()函數(shù)用于獲得MySQL服務(wù)器的當(dāng)前時(shí)間,該時(shí)間與時(shí)區(qū)的設(shè)置密切相關(guān)。
3.1.4MySQL日期類(lèi)型目前一百六十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)MySQL支持兩種復(fù)合數(shù)據(jù)類(lèi)型:enum枚舉類(lèi)型和set集合類(lèi)型。
enum類(lèi)型的字段類(lèi)似于單選按鈕的功能,一個(gè)enum類(lèi)型的數(shù)據(jù)最多可以包含65535個(gè)元素。
set類(lèi)型的字段類(lèi)似于復(fù)選框的功能,一個(gè)set類(lèi)型的數(shù)據(jù)最多可以包含64個(gè)元素。3.1.5MySQL復(fù)合類(lèi)型目前一百六十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)任務(wù)布置2:上機(jī)操作,完成本書(shū)場(chǎng)景描述3的任務(wù)要求,理解復(fù)合類(lèi)型的用法。注意:MySQL模式對(duì)復(fù)合類(lèi)型數(shù)據(jù)的影響。3.1.5MySQL復(fù)合類(lèi)型目前一百六十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)二進(jìn)制類(lèi)型的字段主要用于存儲(chǔ)由‘0’和‘1’組成的字符串,因此從某種意義上將,二進(jìn)制類(lèi)型的數(shù)據(jù)是一種特殊格式的字符串。二進(jìn)制類(lèi)型與字符串類(lèi)型的區(qū)別在于:字符串類(lèi)型的數(shù)據(jù)按字符為單位進(jìn)行存儲(chǔ),因此存在多種字符集、多種字符序;而二進(jìn)制類(lèi)型的數(shù)據(jù)按字節(jié)為單位進(jìn)行存儲(chǔ),僅存在二進(jìn)制字符集binary。
3.1.6MySQL二進(jìn)制類(lèi)型目前一百六十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)3.1.6MySQL二進(jìn)制類(lèi)型目前一百六十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)
選擇合適的數(shù)據(jù)類(lèi)型,不僅可以節(jié)省儲(chǔ)存空間,還可以有效地提升數(shù)據(jù)的計(jì)算性能。(1)在符合應(yīng)用要求(取值范圍、精度)的前提下,盡量使用“短”數(shù)據(jù)類(lèi)型(2)數(shù)據(jù)類(lèi)型越簡(jiǎn)單越好(3)在MySQL中,應(yīng)該用內(nèi)置的日期和時(shí)間數(shù)據(jù)類(lèi)型,而不是用字符串來(lái)存儲(chǔ)日期和時(shí)間。3.1.7選擇合適的數(shù)據(jù)類(lèi)型目前一百七十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)(4)盡量采用精確小數(shù)類(lèi)型(例如decimal),而不采用浮點(diǎn)數(shù)類(lèi)型。使用精確小數(shù)類(lèi)型不僅能夠保證數(shù)據(jù)計(jì)算更為精確,還可以節(jié)省儲(chǔ)存空間,例如百分比使用decimal(4,2)即可。(5)盡量避免NULL字段,建議將字段指定為NOTNULL約束。3.1.7選擇合適的數(shù)據(jù)類(lèi)型目前一百七十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)123createtable表名(字段名1數(shù)據(jù)類(lèi)型[約束條件],…[其他約束條件],[其他約束條件])其他選項(xiàng)(例如存儲(chǔ)引擎、字符集等選項(xiàng))設(shè)置自增型字段設(shè)置約束其他選項(xiàng)的設(shè)置45創(chuàng)建“選課系統(tǒng)”數(shù)據(jù)庫(kù)表復(fù)制一個(gè)表結(jié)構(gòu)3.2創(chuàng)建表目前一百七十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)1.設(shè)置主鍵(PrimaryKey)約束(1)如果一個(gè)表的主鍵是單個(gè)字段,直接在該字段的數(shù)據(jù)類(lèi)型或者其他約束條件后加上“primarykey”關(guān)鍵字,即可將該字段設(shè)置為主鍵約束,語(yǔ)法規(guī)則如下。字段名數(shù)據(jù)類(lèi)型[其他約束條件]primarykey例如:student_nochar(11)primarykey3.2.1設(shè)置約束目前一百七十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)1.設(shè)置主鍵(PrimaryKey)約束(2)如果一個(gè)表的主鍵是多個(gè)字段的組合(例如字段名1與字段名2共同組成主鍵),定義完所有的字段后,使用下面的語(yǔ)法規(guī)則將(字段名1,字段名2)設(shè)置為復(fù)合主鍵。primarykey(字段名1,字段名2)3.2.1設(shè)置約束目前一百七十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)任務(wù)布置:完成本書(shū)場(chǎng)景描述4:查看某個(gè)表的約束條件的任務(wù)要求。注意:MySQL命令后,“\G”的作用。3.2.1設(shè)置約束目前一百七十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)默認(rèn)情況下,MySQL自增型字段的值從1開(kāi)始遞增,且步長(zhǎng)為1。設(shè)置自增型字段的語(yǔ)法格式如下。字段名數(shù)據(jù)類(lèi)型auto_increment3.2.2設(shè)置自增型字段目前一百七十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)1.設(shè)置表的存儲(chǔ)引擎,語(yǔ)法格式如下。engine=存儲(chǔ)引擎類(lèi)型2.設(shè)置該表的字符集,語(yǔ)法格式如下。defaultcharset=字符集類(lèi)型3.2.3其他選項(xiàng)的設(shè)置目前一百七十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)3.設(shè)置索引關(guān)鍵字的壓縮方式,可以通過(guò)設(shè)置pack_keys選項(xiàng)實(shí)現(xiàn)(注意僅對(duì)MyISAM存儲(chǔ)引擎的表有效),語(yǔ)法格式如下。pack_keys=壓縮類(lèi)型壓縮類(lèi)型值為default:表示只壓縮索引中字符串類(lèi)型的關(guān)鍵字(例如char、varchar、text等字段),但不壓縮數(shù)值類(lèi)型的關(guān)鍵字。壓縮類(lèi)型值為0:表示取消索引關(guān)鍵字的壓縮。3.2.3其他選項(xiàng)的設(shè)置目前一百七十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)3.設(shè)置索引關(guān)鍵字的壓縮方式壓縮類(lèi)型值為1:表示壓縮索引中所有關(guān)鍵字的儲(chǔ)存空間,這樣做通常會(huì)使檢索速度加快,更新速度變慢。例如索引中第一個(gè)關(guān)鍵字的值為“perform”,第二關(guān)鍵字的值為“performance”,那么第二關(guān)鍵字會(huì)被存儲(chǔ)為“7,ance”。3.2.3其他選項(xiàng)的設(shè)置目前一百七十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)任務(wù)布置2:書(shū)寫(xiě)本書(shū)場(chǎng)景描述5:創(chuàng)建“選課系統(tǒng)”數(shù)據(jù)庫(kù)表的SQL代碼,調(diào)試,并運(yùn)行。3.2.4創(chuàng)建“選課系統(tǒng)”數(shù)據(jù)庫(kù)表目前一百八十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)復(fù)制一個(gè)表結(jié)構(gòu)的實(shí)現(xiàn)方法有兩種。方法一:在createtable語(yǔ)句的末尾添加like子句,可以將源表的表結(jié)構(gòu)復(fù)制到新表中,語(yǔ)法格式如下。createtable新表名like源表3.2.5復(fù)制一個(gè)表結(jié)構(gòu)目前一百八十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)復(fù)制一個(gè)表結(jié)構(gòu)的實(shí)現(xiàn)方法有兩種。方法二、在createtable語(yǔ)句的末尾添加一個(gè)select語(yǔ)句,可以實(shí)現(xiàn)表結(jié)構(gòu)的復(fù)制,甚至可以將源表的表記錄拷貝到新表中。下面的語(yǔ)法格式將源表的表結(jié)構(gòu)以及源表的所有記錄拷貝到新表中。createtable新表名select*from源表3.2.5復(fù)制一個(gè)表結(jié)構(gòu)目前一百八十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)123成熟的數(shù)據(jù)庫(kù)設(shè)計(jì),數(shù)據(jù)庫(kù)的表結(jié)構(gòu)一般不會(huì)發(fā)生變化。數(shù)據(jù)庫(kù)的表結(jié)構(gòu)一旦發(fā)生變化,基于該表的視圖、觸發(fā)器、存儲(chǔ)過(guò)程將直接受到影響,甚至導(dǎo)致應(yīng)用程序的修改。修改約束條件修改字段相關(guān)信息修改表的其他選項(xiàng)4修改表名3.3修改表結(jié)構(gòu)4目前一百八十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)1.刪除字段刪除表字段的語(yǔ)法格式如下。altertable表名drop字段名3.3.1修改字段相關(guān)信息目前一百八十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)2.添加新字段向表添加新字段時(shí),通常需要指定新字段在表中的位置。向表添加新字段的語(yǔ)法格式如下。altertable表名add新字段名新數(shù)據(jù)類(lèi)型[新約束條件][first|after舊字段名]3.3.1修改字段相關(guān)信息目前一百八十五頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)3.修改字段名(或者數(shù)據(jù)類(lèi)型)(1)修改表的字段名(及數(shù)據(jù)類(lèi)型)的語(yǔ)法格式如下。altertable表名change舊字段名新字段名新數(shù)據(jù)類(lèi)型3.3.1修改字段相關(guān)信息目前一百八十六頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)3.修改字段名(或者數(shù)據(jù)類(lèi)型)(2)如果僅對(duì)字段的數(shù)據(jù)類(lèi)型進(jìn)行修改,可以使用下面的語(yǔ)法格式。altertable表名modify字段名新數(shù)據(jù)類(lèi)型3.3.1修改字段相關(guān)信息目前一百八十七頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)1.添加約束條件向表的某個(gè)字段添加約束條件的語(yǔ)法格式如下(其中約束類(lèi)型可以是唯一性約束、主鍵約束及外鍵約束)。altertable表名addconstraint約束名約束類(lèi)型(字段名)3.3.2修改約束條件目前一百八十八頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)2.刪除約束條件(1)刪除表的主鍵約束條件語(yǔ)法格式比較簡(jiǎn)單,語(yǔ)法格式如下。altertable表名dropprimarykey(2)刪除表的外鍵約束時(shí),需指定外鍵約束名稱,語(yǔ)法格式如下(注意需指定外鍵約束名)。altertable表名dropforeignkey約束名3.3.2修改約束條件目前一百八十九頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)2.刪除約束條件(3)若要?jiǎng)h除表字段的唯一性約束,實(shí)際上只需刪除該字段的唯一性索引即可,語(yǔ)法格式如下(注意需指定唯一性索引的索引名)。3.3.2修改約束條件目前一百九十頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)altertable表名engine=新的存儲(chǔ)引擎類(lèi)型altertable表名defaultcharset=新的字符集altertable表名auto_increment=新的初始值altertable表名pack_keys=新的壓縮類(lèi)型
3.3.3修改表的其他選項(xiàng)目前一百九十一頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)修改表名的語(yǔ)法格式較為簡(jiǎn)單,語(yǔ)法格式如下。renametable舊表名to新表名該命令等效于:altertable舊表名rename新表名3.3.4修改表名目前一百九十二頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)刪除表的SQL語(yǔ)法格式比較簡(jiǎn)單,前面也已經(jīng)講過(guò),這里不再贅述。這里唯一需要強(qiáng)調(diào)的是刪除表時(shí),如果表之間存在外鍵約束關(guān)系,此時(shí)需要注意刪除表的順序。
3.4刪除表目前一百九十三頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)123創(chuàng)建數(shù)據(jù)庫(kù)表時(shí),初學(xué)者通常僅僅關(guān)注該表有哪些字段、字段的數(shù)據(jù)類(lèi)型及約束條件等信息,數(shù)據(jù)庫(kù)表中另一個(gè)重要的概念“索引”很容易被忽視。索引關(guān)鍵字的選取原則理解索引索引與約束45創(chuàng)建索引刪除索引3.5索引目前一百九十四頁(yè)\總數(shù)七百一十五頁(yè)\編于十五點(diǎn)想象一下現(xiàn)代漢語(yǔ)詞典的使用方法,理解索引的重要性。1.索引的本質(zhì)是什么?2.MySQL數(shù)據(jù)庫(kù)中,數(shù)據(jù)是如何檢索的?3
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年環(huán)保產(chǎn)品購(gòu)銷(xiāo)合同標(biāo)準(zhǔn)文本一
- 2024-2030年中國(guó)奶茶粉行業(yè)市場(chǎng)銷(xiāo)售渠道及未來(lái)趨勢(shì)發(fā)展分析報(bào)告
- 2024-2030年中國(guó)大數(shù)據(jù)金融行業(yè)發(fā)展創(chuàng)新模式及投資規(guī)劃分析報(bào)告
- 2024-2030年中國(guó)垃圾轉(zhuǎn)運(yùn)車(chē)行業(yè)競(jìng)爭(zhēng)格局展望及投資策略分析報(bào)告
- 2024-2030年中國(guó)印刷機(jī)械制造行業(yè)產(chǎn)銷(xiāo)需求及投資策略分析報(bào)告
- 2024年版給排水系統(tǒng)安裝作業(yè)勞務(wù)合作合同版B版
- 2024年智能穿戴設(shè)備設(shè)計(jì)優(yōu)化與功能升級(jí)合同3篇
- 2024年物資購(gòu)銷(xiāo)合同范例
- 眉山藥科職業(yè)學(xué)院《首飾材料與首飾設(shè)計(jì)實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024勞動(dòng)資源開(kāi)發(fā)合同3篇
- 分支機(jī)構(gòu)職場(chǎng)租賃裝修及家具設(shè)備管理辦法
- 智慧樹(shù)知到《大學(xué)生就業(yè)21問(wèn)》見(jiàn)面課答案
- 鈾礦物資源庫(kù)所有的鈾礦總結(jié)
- 《20211國(guó)標(biāo)給排水專(zhuān)業(yè)圖集資料》05SS907-6 磚砌排水檢查井及跌水井
- 居家養(yǎng)老日間照料中心服務(wù)項(xiàng)目臺(tái)賬(共29頁(yè))
- 小學(xué)數(shù)學(xué)答題卡模板(共4頁(yè))
- 防損制度(酒店版)
- 晨暉智能一卡通管理系統(tǒng)(1)
- 保險(xiǎn)精算李秀芳1-5章習(xí)題答案
- 酒店裝修施工進(jìn)度表
- 綜合布線系統(tǒng)施工組織方案設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論