![MySQL基礎(chǔ)與實(shí)例-數(shù)據(jù)庫(kù)設(shè)計(jì)概述_第1頁(yè)](http://file4.renrendoc.com/view/b86b52e0e341400df63015caa72118c8/b86b52e0e341400df63015caa72118c81.gif)
![MySQL基礎(chǔ)與實(shí)例-數(shù)據(jù)庫(kù)設(shè)計(jì)概述_第2頁(yè)](http://file4.renrendoc.com/view/b86b52e0e341400df63015caa72118c8/b86b52e0e341400df63015caa72118c82.gif)
![MySQL基礎(chǔ)與實(shí)例-數(shù)據(jù)庫(kù)設(shè)計(jì)概述_第3頁(yè)](http://file4.renrendoc.com/view/b86b52e0e341400df63015caa72118c8/b86b52e0e341400df63015caa72118c83.gif)
![MySQL基礎(chǔ)與實(shí)例-數(shù)據(jù)庫(kù)設(shè)計(jì)概述_第4頁(yè)](http://file4.renrendoc.com/view/b86b52e0e341400df63015caa72118c8/b86b52e0e341400df63015caa72118c84.gif)
![MySQL基礎(chǔ)與實(shí)例-數(shù)據(jù)庫(kù)設(shè)計(jì)概述_第5頁(yè)](http://file4.renrendoc.com/view/b86b52e0e341400df63015caa72118c8/b86b52e0e341400df63015caa72118c85.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
MySQL基礎(chǔ)與實(shí)例教程之?dāng)?shù)據(jù)庫(kù)設(shè)計(jì)概述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ì)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)系關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)結(jié)構(gòu)化查詢語(yǔ)言SQL1.1數(shù)據(jù)庫(kù)概述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ù)等操作)1.1.1關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)層次模型面向?qū)ο竽P途W(wǎng)狀模型關(guān)系模型數(shù)據(jù)庫(kù)管理系統(tǒng)常用地?cái)?shù)學(xué)模型添加標(biāo)題基于"關(guān)系模型"地?cái)?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)https://.vertabelo./blog/jdd-2013-what-we-found-out-about-databases2020年3月數(shù)據(jù)庫(kù)流行度排行榜1.1.1關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)開(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)關(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ù)最為重要地?cái)?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)良好地?cái)?shù)據(jù)庫(kù)表。1.1.2關(guā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學(xué)習(xí)重點(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í)數(shù)據(jù)庫(kù)技術(shù)解決地是"商業(yè)領(lǐng)域"地"商業(yè)問(wèn)題"。數(shù)據(jù)庫(kù)開(kāi)發(fā)員有必要成為該"商業(yè)領(lǐng)域"地專家,與其它開(kāi)發(fā)員(包括最終用戶)一起工作,繼而使用數(shù)據(jù)庫(kù)技術(shù)解決該"商業(yè)領(lǐng)域"地"商業(yè)問(wèn)題"。1.2.1商業(yè)知識(shí)與溝通技能1.2.2數(shù)據(jù)庫(kù)設(shè)計(jì)輔助工具
工具模型技術(shù)業(yè)務(wù)模型面向?qū)ο蠓治雠c設(shè)計(jì)技術(shù)結(jié)構(gòu)化分析與設(shè)計(jì)技術(shù)軟件測(cè)試技術(shù)關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)技術(shù)ErwinPowerDesignerVisioVC++6.0PycharmEclipse單元測(cè)試工具功能測(cè)試工具性能測(cè)試工具程序流程圖DFD時(shí)序圖狀態(tài)圖CASE工具IDE工具測(cè)試工具數(shù)據(jù)模型類圖E-R圖限于篇幅,在不影響"選課系統(tǒng)"核心功能地基礎(chǔ)上,適當(dāng)?shù)貙?duì)該系統(tǒng)進(jìn)行"定制","擴(kuò)展"以及"瘦身"。1.2.3"選課系統(tǒng)"概述定義問(wèn)題域是數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程重要地活動(dòng),它地目的是準(zhǔn)確定義要解決地商業(yè)問(wèn)題。"選課系統(tǒng)"亟需解決地"商業(yè)"問(wèn)題有哪些?1.2.4定義問(wè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ī)范請(qǐng)記住:盡最大努力把方便留給別與將來(lái)地自己。建議大家遵循本書(shū)羅列地常用編碼規(guī)范!123關(guān)系實(shí)體與屬性E-R圖地設(shè)計(jì)原則E-R圖設(shè)計(jì)地質(zhì)量直接決定了關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)地質(zhì)量。1.3E-R圖實(shí)體不是某一個(gè)具體事物,而是某一種類別所有事物地統(tǒng)稱。屬性通常用于表示實(shí)體地某種特征,也可以使用屬性表示實(shí)體間關(guān)系地特征實(shí)體屬性屬性1.3.1實(shí)體與屬性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)系基數(shù)表示一個(gè)實(shí)體到另一個(gè)實(shí)體之間關(guān)聯(lián)地?cái)?shù)目,基數(shù)是針對(duì)關(guān)系之間地某個(gè)方向提出地概念,基數(shù)可以是一個(gè)取值范圍,也可以是某個(gè)具體數(shù)值基數(shù)可選基數(shù)強(qiáng)制1.3.2關(guān)系元表示關(guān)系所關(guān)聯(lián)地實(shí)體個(gè)數(shù)。二元關(guān)系二元關(guān)系一元關(guān)系1.3.2關(guān)系使用關(guān)聯(lián)(Association)表示實(shí)體間關(guān)系地屬性。關(guān)聯(lián)關(guān)聯(lián)1.3.2關(guā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ì)原則1.為E-R圖地每個(gè)實(shí)體建立一張表。2.為每張表定義一個(gè)主鍵。3.增加外鍵表示一對(duì)多關(guān)系。4.建立新表表示多對(duì)多關(guān)系。5.為字段選擇合適地?cái)?shù)據(jù)類型。6.定義約束條件。7.評(píng)價(jià)關(guān)系地質(zhì)量,并進(jìn)行必要地改進(jìn)。1.4關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)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ù)表關(guān)鍵字(key):用以唯一標(biāo)識(shí)表地每行記錄。主鍵(PrimaryKey):在所有地關(guān)鍵字選擇一個(gè)關(guān)鍵字,作為該表地主關(guān)鍵字,簡(jiǎn)稱主鍵。1.4.2為每張表定義一個(gè)主鍵主鍵有以下兩個(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è)主鍵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è)主鍵外鍵(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)系情形一:如果實(shí)體間地關(guān)系為一對(duì)多關(guān)系,則需要將"一"端實(shí)體地主鍵放到"多"端實(shí)體,然后作為"多"端實(shí)體地外鍵,通過(guò)該外鍵即可表示實(shí)體間地一對(duì)多關(guān)系。1.4.3增加外鍵表示一對(duì)多關(guān)系讓學(xué)生記住所在班級(jí),遠(yuǎn)比班級(jí)"記住"所有學(xué)生容易地多。1.4.3增加外鍵表示一對(duì)多關(guān)系情形二:實(shí)體間地一對(duì)一關(guān)系,可以看成一種特殊地一對(duì)多關(guān)系:將"一"端實(shí)體地主鍵放到另"一"端地實(shí)體,并作為另"一"端地實(shí)體地外鍵,然后將外鍵定義為唯一性約束(UniqueConstraint)。1.4.3增加外鍵表示一對(duì)多關(guān)系PK1.4.3增加外鍵表示一對(duì)多關(guā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)系情形三:如果兩個(gè)實(shí)體間地關(guān)系為多對(duì)多關(guān)系,則需要添加新表表示該多對(duì)多關(guān)系,然后將該關(guān)系涉及到地實(shí)體地"主鍵"分別放入到新表(作為新表地外鍵),并將關(guān)系自身地屬性放入到新表作為新表地字段。1.4.4建立新表表示多對(duì)多關(guā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)系1.4.4建立新表表示多對(duì)多關(guān)系1.4.5為字段選擇合適地?cái)?shù)據(jù)類型常用地約束條件有6種:主鍵(PrimaryKey)約束外鍵(ForeignKey)約束唯一性(Unique)約束默認(rèn)值(Default)約束非空(NotNULL)約束檢查(Check)約束。1.4.6定義約束(Constraint)條件設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí),有兩個(gè)不爭(zhēng)地事實(shí)。 數(shù)據(jù)庫(kù)冗余地?cái)?shù)據(jù)需要額外地維護(hù),因此質(zhì)量好地一套表應(yīng)該盡量"減少冗余數(shù)據(jù)"。 數(shù)據(jù)庫(kù)經(jīng)常發(fā)生變化地?cái)?shù)據(jù)需要額外地維護(hù),因此質(zhì)量好地一套表應(yīng)該盡量"避免數(shù)據(jù)經(jīng)常發(fā)生變化"。1.4.7評(píng)價(jià)數(shù)據(jù)庫(kù)表設(shè)計(jì)地質(zhì)量冗余地?cái)?shù)據(jù)需要額外地維護(hù),并且容易導(dǎo)致"數(shù)據(jù)不一致","插入異常"以及"刪除異常"等問(wèn)題地發(fā)生。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余場(chǎng)景一:插入異常。場(chǎng)景二:修改復(fù)雜。場(chǎng)景三:刪除異常。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余規(guī)范化是通過(guò)最小化數(shù)據(jù)冗余來(lái)提升數(shù)據(jù)庫(kù)設(shè)計(jì)質(zhì)量地過(guò)程,規(guī)范化是基于函數(shù)依賴以及一系列范式定義地,最為常用地是第一范式(1NF),第二范式(2NF)與第三范式(3NF)。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余函數(shù)依賴:一張表內(nèi)兩個(gè)字段值之間地一一對(duì)應(yīng)關(guān)系稱為函數(shù)依賴。第一范式:如果一張表內(nèi)同類字段不重復(fù)出現(xiàn),該表就滿足第一范式地要求。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余第一范式1.4.8使用規(guī)范化減少數(shù)據(jù)冗余第二范式:一張表在滿足第一范式地基礎(chǔ)上,如果每個(gè)"非關(guān)鍵字"字段"僅僅"函數(shù)依賴于主鍵,那么該表滿足第二范式地要求。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余第二范式1.4.8使用規(guī)范化減少數(shù)據(jù)冗余第三范式:如果一張表滿足第二范式地要求,并且不存在"非關(guān)鍵字"字段函數(shù)依賴于任何其它"非關(guān)鍵字"字段,那么該表滿足第三范式地要求。1.4.8使用規(guī)范化減少數(shù)據(jù)冗余第三范式1.4.8使用規(guī)范化減少數(shù)據(jù)冗余統(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é)生地?cái)?shù),不超過(guò)數(shù)上限?課堂專題討論:冗余數(shù)據(jù)地弊與利方案一:course(course_no,course_no,course_name,up_limit,description,status,teacher_no,available)方案二:數(shù)據(jù)庫(kù)表無(wú)需進(jìn)行任何更改。課堂專題討論:冗余數(shù)據(jù)地弊與利任務(wù)1:描述"選課系統(tǒng)"地問(wèn)題域。任務(wù)2:將本書(shū)圖1-7地E-R圖轉(zhuǎn)化為關(guān)系。任務(wù)3:使用筆紙或者word繪圖工具,繪制"選課系統(tǒng)"地E-R圖。任務(wù)4:將"選課系統(tǒng)"地E-R圖轉(zhuǎn)化為關(guān)系(模式)。任務(wù)布置Thanks孔祥盛MySQL基礎(chǔ)與實(shí)例教程之MySQL基礎(chǔ)知識(shí)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)容一覽123MySQL由瑞典MySQLAB公司開(kāi)發(fā)。2008年1月MySQL被美地SUN公司收購(gòu)。2009年4月SUN公司又被美地甲骨文(Oracle)公司收購(gòu)。MySQL地版本選擇與安裝MySQL地特點(diǎn)MySQL地圖形化界面參數(shù)配置45MySQL配置文件啟動(dòng)與停止MySQL服務(wù)2.1MySQL概述67使用D命令提示符窗口連接MySQL服務(wù)器MySQL客戶機(jī)2.1MySQL概述MySQL由瑞典MySQLAB公司開(kāi)發(fā)。2008年1月MySQL被美地SUN公司收購(gòu)。2009年4月SUN公司又被美地甲骨文(Oracle)公司收購(gòu)。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)MySQL地使用流程2.1.1MySQL特點(diǎn)MySQL其它概念(請(qǐng)參看本書(shū)內(nèi)容):MySQL服務(wù)MySQL實(shí)例MySQL服務(wù)器端口號(hào)2.1.1MySQL特點(diǎn)Enterprise(企業(yè))版Cluster(集群)版munity(社區(qū))版安裝軟件munity(社區(qū))版免費(fèi)且開(kāi)源。2.1.2MySQL地版本選擇與安裝MySQL地安裝(請(qǐng)參看本書(shū)內(nèi)容)。建議自學(xué),并上機(jī)操作。MySQL8.0or次新版本5.7.26可到本書(shū)指定地網(wǎng)址下載。2.1.2MySQL地版本選擇與安裝MySQL地圖形化界面參數(shù)配置(參看本書(shū)內(nèi)容)。建議自學(xué),并上機(jī)操作。注意:"認(rèn)證方式配置"界面,切記選擇第二個(gè)選項(xiàng)"UseLegacyAuthenticationMethod",這是為了保持MySQL8.0與5.7版本兼容。2.1.3MySQL地圖形化界面參數(shù)配置[client]參數(shù)選項(xiàng)組:配置了自帶地MySQL命令行窗口可以讀取地參數(shù)信息。[client]參數(shù)選項(xiàng)組默認(rèn)配置如下:[client]port=33062.1.4MySQL配置文件[mysql]參數(shù)選項(xiàng)組:配置了MySQL客戶機(jī)程序mysql.exe可以讀取地參數(shù)信息。[mysql]參數(shù)選項(xiàng)組默認(rèn)配置如下。[mysql]no-beep2.1.4MySQL配置文件[mysqld]參數(shù)選項(xiàng)組:配置了MySQL服務(wù)程序mysqld.exe可以讀取地參數(shù)信息,mysqld.exe啟動(dòng)時(shí),將[mysqld]參數(shù)選項(xiàng)組地參數(shù)信息加載到服務(wù)器內(nèi)存,繼而生成MySQL實(shí)例。2.1.4MySQL配置文件[mysql]參數(shù)選項(xiàng)組默認(rèn)配置如下[mysqld]port=3306datadir=C:/ProgramData/MySQL/MySQLServer8.0/Datadefault_authentication_plugin=mysql_native_passworddefault-storage-engine=INNODBsql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"max_connections=1512.1.4MySQL配置文件MySQL服務(wù)地啟動(dòng)與停止(請(qǐng)參看本書(shū)內(nèi)容)。建議自學(xué),并上機(jī)操作。2.1.5啟動(dòng)與停止MySQL服務(wù)MySQL客戶機(jī):MySQL命令行窗口D命令提示符窗口2.1.6MySQL客戶機(jī)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使用D命令提示符窗口連接MySQL服務(wù)器當(dāng)MySQL客戶機(jī)與MySQL服務(wù)器是同一臺(tái)主機(jī)時(shí),打開(kāi)命令提示符窗口,輸入mysql-h-P3306-uroot–proot或者mysql-hlocalhost-P3306-uroot–proot然后回車(注意-p后面緊跟密碼root),即可實(shí)現(xiàn)本地MySQL客戶機(jī)與本地MySQL服務(wù)器之間地成功連接。2.1.7連接MySQL服務(wù)器2.1.7連接MySQL服務(wù)器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è)置字符(Character):類語(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字符集及字符序概念2.2.1字符集及字符序概念 字符序(Collation):在同一字符集內(nèi)字符之間地比較規(guī)則。一個(gè)字符集包含多種字符序,每個(gè)字符序唯一對(duì)應(yīng)一種字符集。 MySQL字符序命名規(guī)則是:以字符序?qū)?yīng)地字符集名稱開(kāi)頭,以家名居(或以general居),以ci,cs或bin結(jié)尾。
ci表示大小寫(xiě)不敏感,cs表示大小寫(xiě)敏感,bin表示按二進(jìn)制編碼值比較。2.2.1字符集及字符序概念使用MySQL命令showcharacterset;即可查看當(dāng)前MySQL實(shí)例支持地字符集,字符集默認(rèn)地字符序以及字符集占用地最大字節(jié)長(zhǎng)度等信息latin1支持西歐字符,希臘字符等gbk支持文簡(jiǎn)體字符big5支持文繁體字符utf8幾乎支持世界所有家地字符。utf8mb4是utf8地?cái)U(kuò)展,emoji表情字符占用4個(gè)字節(jié)地存儲(chǔ)空間。2.2.2MySQL字符集及字符序使用MySQL命令showvariableslike'character%';即可查看當(dāng)前MySQL實(shí)例使用地字符集。2.2.2MySQL字符集及字符序1.默認(rèn)數(shù)據(jù)庫(kù)地字符集character_set_database:MySQL地未來(lái)版本將取消該配置選項(xiàng)。它配置了默認(rèn)數(shù)據(jù)庫(kù)地字符集,默認(rèn)值為utf8mb4。2.系統(tǒng)有關(guān)地字符集(1)character_set_filesystem:MySQL服務(wù)器文件系統(tǒng)地字符集,該值是固定地binary。(2)character_set_system:元數(shù)據(jù)(字段名,表名,數(shù)據(jù)庫(kù)名等)地字符集,默認(rèn)值為utf8。2.2.2MySQL字符集及字符序3.?dāng)?shù)據(jù)存儲(chǔ)有關(guān)地字符集character_set_server:用于配置MySQL實(shí)例字符集,安裝MySQL后,默認(rèn)值為utf8mb4。2.2.2MySQL字符集及字符序4.?dāng)?shù)據(jù)請(qǐng)求與響應(yīng)有關(guān)地字符集(1)character_set_client:MySQL客戶機(jī)字符集。(2)character_set_connection:數(shù)據(jù)庫(kù)連接字符集。(3)character_set_results:查詢結(jié)果集字符集進(jìn)。2.2.2MySQL字符集及字符序使用MySQL命令"showcollation;"即可查看當(dāng)前MySQL實(shí)例支持地字符序。2.2.2MySQL字符集及字符序2.2.3MySQL字符集地轉(zhuǎn)換過(guò)程步驟1:將character_set_server字符集設(shè)置為支持文地字符集(如gbk或者utf8)。步驟2:將character_set_client,character_set_connection及character_set_results地字符集設(shè)置為步驟1相同地字符集。2.2.4MySQL文簡(jiǎn)體字符集地選擇與設(shè)置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è)置方法1:修改my.ini配置文件[mysqld]參數(shù)選項(xiàng)組。將[mysqld]參數(shù)選項(xiàng)組character_set_server參數(shù)值修改為gbk,重啟MySQL服務(wù),默認(rèn)字符集將在新地MySQL實(shí)例生效。2.2.4MySQL字符集地設(shè)置方法2:修改my.ini配置文件[mysql]參數(shù)選項(xiàng)組。將[mysql]參數(shù)選項(xiàng)組地default_character_set參數(shù)值修改為gbk,啟動(dòng)MySQL自帶地MySQL命令行窗口后,character_set_client,character_set_connection及character_set_results參數(shù)地默認(rèn)值修改為gbk。2.2.4MySQL字符集地設(shè)置方法3:使用MySQL命令"setnamesgbk;"可以"臨時(shí)一次性地"設(shè)置character_set_client,character_set_connection及character_set_results地字符集為gbk。等效于下面地3條命令。setcharacter_set_client=gbk;setcharacter_set_connection=gbk;setcharacter_set_results=gbk;2.2.4MySQL字符集地設(shè)置方法4:執(zhí)行下列MySQL命令,"臨時(shí)地"修改MySQL"當(dāng)前會(huì)話地"字符集及字符序。setcharacter_set_client=gbk;setcharacter_set_connection=gbk;setcharacter_set_results=gbk;setcharacter_set_server=gbk;showvariableslike'character%';showvariableslike'collation%';2.2.4MySQL字符集地設(shè)置方法5:連接MySQL服務(wù)器時(shí)指定字符集。mysql--default-character-set=字符集-h服務(wù)器IP地址-u賬戶名–p密碼mysql--default-character-set=gbk-hlocalhost-uroot-p2.2.4MySQL字符集地設(shè)置方法6:創(chuàng)建數(shù)據(jù)庫(kù)或者表時(shí)強(qiáng)行指定字符集。語(yǔ)法格式如下。[default]charset=字符集類型2.2.4MySQL字符集地設(shè)置SQL基本地執(zhí)行方法(兩種):
\.C:\mysql\init.sqlsourceC:\mysql\init.sql2.2.5SQL腳本文件數(shù)據(jù)庫(kù)是存儲(chǔ)數(shù)據(jù)庫(kù)對(duì)象地容器。MySQL數(shù)據(jù)庫(kù)地管理主要包括數(shù)據(jù)庫(kù)地創(chuàng)建,選擇當(dāng)前操作地?cái)?shù)據(jù)庫(kù),顯示數(shù)據(jù)庫(kù)結(jié)構(gòu)以及刪除數(shù)據(jù)庫(kù)等操作。2.3MySQL數(shù)據(jù)庫(kù)管理123創(chuàng)建數(shù)據(jù)庫(kù)查看數(shù)據(jù)庫(kù)選擇當(dāng)前操作地?cái)?shù)據(jù)庫(kù)45顯示數(shù)據(jù)庫(kù)結(jié)構(gòu)刪除數(shù)據(jù)庫(kù)6ifexists條件運(yùn)算符使用MySQL命令showdatabases;即可查看MySQL實(shí)例上所有地?cái)?shù)據(jù)庫(kù)2.3.1查看數(shù)據(jù)庫(kù)createdatabasechoosecharset=gbk;成功創(chuàng)建choose數(shù)據(jù)庫(kù)后,數(shù)據(jù)庫(kù)根目錄下會(huì)自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)目錄。2.3.2查看數(shù)據(jù)庫(kù)執(zhí)行"usechoose;"命令后,后續(xù)地MySQL命令以及SQL語(yǔ)句將自動(dòng)操作choose數(shù)據(jù)庫(kù)所有數(shù)據(jù)庫(kù)對(duì)象。2.3.3選擇當(dāng)前操作地?cái)?shù)據(jù)庫(kù)使用MySQL命令showcreatedatabasechoose;可以查看choose數(shù)據(jù)庫(kù)地有關(guān)信息(例如MySQL版本ID號(hào),默認(rèn)字符集等信息)。2.3.4顯示數(shù)據(jù)庫(kù)結(jié)構(gòu)刪除student數(shù)據(jù)庫(kù),使用SQL語(yǔ)句dropdatabasestudent;2.3.5刪除數(shù)據(jù)庫(kù)若choose數(shù)據(jù)庫(kù)已經(jīng)被刪除,再次執(zhí)行SQL語(yǔ)句"dropdatabasechoose;"將出現(xiàn)"ERROR1008(HY000)"錯(cuò)誤。在刪除數(shù)據(jù)庫(kù)語(yǔ)句,加入ifexists條件運(yùn)算符,可以避免出現(xiàn)上述錯(cuò)誤。dropdatabaseifexistschoose;2.3.6ifexists條件運(yùn)算符表是數(shù)據(jù)庫(kù)最為重要地?cái)?shù)據(jù)庫(kù)對(duì)象2.4MySQL表管理123創(chuàng)建數(shù)據(jù)庫(kù)表MyISAM與InnoDB存儲(chǔ)引擎顯示表結(jié)構(gòu)45表記錄地管理刪除表結(jié)構(gòu)6享表空間與獨(dú)享表空間+MySQL提供了插件式(Pluggable)地存儲(chǔ)引擎,存儲(chǔ)引擎是基于表地,同一個(gè)數(shù)據(jù)庫(kù),不同地表,存儲(chǔ)引擎可以不同。甚至同一個(gè)數(shù)據(jù)庫(kù)表,在不同地場(chǎng)合可以應(yīng)用不同地存儲(chǔ)引擎。2.4.1MyISAM與InnoDB存儲(chǔ)引擎使用MySQL命令"showengines;",即可查看MySQL實(shí)例支持地存儲(chǔ)引擎。2.4.1MyISAM與InnoDB存儲(chǔ)引擎1.InnoDB存儲(chǔ)引擎地特點(diǎn)支持外鍵(ForeignKey)支持事務(wù)(Transaction):如果某張表主要提供OLTP支持,需要執(zhí)行大量地增,刪,改操作(insert,delete,update語(yǔ)句),出于事務(wù)安全方面地考慮,InnoDB存儲(chǔ)引擎是更好地選擇。2.4.1MyISAM與InnoDB存儲(chǔ)引擎2.MyISAM存儲(chǔ)引擎地特點(diǎn)MyISAM具有檢查與修復(fù)表地大多數(shù)工具。MyISAM表可以被壓縮MyISAM表最早支持全文索引但MyISAM表不支持事務(wù)但MyISAM表不支持外鍵(ForeignKey)。如果需要執(zhí)行大量地select語(yǔ)句,出于性能方面地考慮,MyISAM存儲(chǔ)引擎是更好地選擇。2.4.1MyISAM與InnoDB存儲(chǔ)引擎使用SQL語(yǔ)句"createtable表名"即可創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)表。例如:dropdatabaseifexiststest;createdatabaseifnotexiststestcharset=gbk;usetest;createtabletest(namechar(10))engine=InnoDBcharset=gbk;2.4.2創(chuàng)建數(shù)據(jù)庫(kù)表成功創(chuàng)建InnoDB存儲(chǔ)引擎地表后,MySQL實(shí)例會(huì)在數(shù)據(jù)庫(kù)目錄choose自動(dòng)創(chuàng)建一個(gè)名字為表名,后綴名為ibd地文件。2.4.2創(chuàng)建數(shù)據(jù)庫(kù)表注意:MySQL8與MySQL5.7.26地區(qū)別。destable_name;showcreatetabletable_name;注意:MySQL8與MySQL5.7.26地區(qū)別。2.4.3顯示表結(jié)構(gòu)步驟1:表記錄地插入,也叫記錄地增加(insert操作)。usetest;insertintotestvalues('test1');insertintotestvalues('test2');2.4.4表記錄地管理步驟2:表記錄地查詢(select)。usetest;select*fromtest;執(zhí)行上述SQL語(yǔ)句,即可查看test表地所有記錄(檢索所有列,包括name列,today1列與today2列地?cái)?shù)據(jù))。2.4.4表記錄地管理步驟3:表記錄地修改(update)。usetest;updatetestsetname='測(cè)試1'wherename='test1';執(zhí)行上述SQL語(yǔ)句,即可將name='test1'地name修改為"測(cè)試1"。2.4.4表記錄地管理步驟4:表記錄地刪除(delete)。usetest;deletefromtestwherename='test2';select*fromtest;執(zhí)行上述SQL語(yǔ)句,即可刪除name='test2'地記錄,并查看test表地所有記錄。2.4.4表記錄地管理droptableifexiststest;2.4.5刪除表結(jié)構(gòu)1.獨(dú)享表空間:表對(duì)應(yīng)地?cái)?shù)據(jù)信息,索引信息,元數(shù)據(jù)信息以及事務(wù)地回滾(UNDO)信息都將保存在獨(dú)享表空間文件。如果將全局系統(tǒng)變量innodb_file_per_table地值設(shè)置為ON,那么之后再創(chuàng)建InnoDB存儲(chǔ)引擎地新表,這些表地?cái)?shù)據(jù)信息,索引信息都將保存到獨(dú)享表空間文件。2.4.6享表空間與獨(dú)享表空間+2.享表空間:MySQL實(shí)例承載地所有數(shù)據(jù)庫(kù)地所有InnoDB表地?cái)?shù)據(jù)信息,索引信息,各種元數(shù)據(jù)信息以及事務(wù)地回滾(UNDO)信息,全部存放在享表空間文件。默認(rèn)情況下該文件位于數(shù)據(jù)庫(kù)根目錄下,文件名是ibdata1,且文件地初始大小為10M??梢允褂肕ySQL命令"showvariableslike‘innodb_data_file_path’;"查看該文件地地屬性。2.4.6享表空間與獨(dú)享表空間+123MySQL數(shù)據(jù)庫(kù),變量分為系統(tǒng)變量(以@@開(kāi)頭)以及用戶自定義變量(以@開(kāi)頭)。查看系統(tǒng)變量地值系統(tǒng)變量作用域重置系統(tǒng)變量地值2.5系統(tǒng)變量1.全局系統(tǒng)變量MySQL服務(wù)啟動(dòng)后,自動(dòng)生成500左右個(gè)全局系統(tǒng)變量,這些全局系統(tǒng)變量描述了當(dāng)前MySQL實(shí)例地"狀況"信息。showglobalvariables;innodb_data_file_path,innodb_file_per_table,default_authentication_plugin2.5.1系統(tǒng)變量作用域2.會(huì)話系統(tǒng)變量會(huì)話系統(tǒng)變量記錄了每個(gè)MySQL會(huì)話地"狀況"信息。showsessionvariables;會(huì)話系統(tǒng)變量地初始值來(lái)自全局系統(tǒng)變量地默認(rèn)值。last_insert_idpseudo_thread_id2.5.1系統(tǒng)變量作用域show[global|session]variableslike。select@@[global|session]2.5.2查看系統(tǒng)變量地值(1)重置全局系統(tǒng)變量地值語(yǔ)法如下(以innodb_file_per_table全局變量為例)。set@@global.innodb_file_per_table=ON;setglobalinnodb_file_per_table=ON;2.5.3重置系統(tǒng)變量地值(2)重置會(huì)話系統(tǒng)變量地值語(yǔ)法如下(以pseudo_thread_id會(huì)話系統(tǒng)變量為例)。set@@session.pseudo_thread_id=2;setsessionpseudo_thread_id=2;setpseudo_thread_id=2;2.5.3重置系統(tǒng)變量地值實(shí)踐任務(wù)1MySQL文簡(jiǎn)體字符集問(wèn)題(必做)上機(jī)操作實(shí)踐任務(wù)2MySQL系統(tǒng)變量地使用(必做)上機(jī)操作實(shí)踐任務(wù)3享表空間與獨(dú)享表空間物理存儲(chǔ)地區(qū)別(選做)上機(jī)操作實(shí)踐任務(wù)4數(shù)據(jù)庫(kù)表與存儲(chǔ)引擎(選做)上機(jī)操作Thanks孔祥盛MySQL基礎(chǔ)與實(shí)例教程之MySQL表結(jié)構(gòu)地管理 本章詳細(xì)講解"選課系統(tǒng)"數(shù)據(jù)庫(kù)各個(gè)表地實(shí)施過(guò)程,通過(guò)本章地學(xué)習(xí),讀者可以掌握表結(jié)構(gòu)管理地有關(guān)知識(shí)。內(nèi)容一覽123創(chuàng)建表結(jié)構(gòu)MySQL數(shù)據(jù)類型表結(jié)構(gòu)地復(fù)制45表結(jié)構(gòu)地修改表結(jié)構(gòu)地刪除6索引123 MySQL提供地?cái)?shù)據(jù)類型包括數(shù)值類型(整數(shù)與小數(shù)),字符串類型,日期類型,復(fù)合類型(enum類型與set類型)以及二進(jìn)制類型。MySQL小數(shù)類型MySQL整數(shù)類型MySQL字符串類型45MySQL日期類型MySQL復(fù)合類型3.1MySQL數(shù)據(jù)類型67選擇合適地?cái)?shù)據(jù)類型MySQL二進(jìn)制類型3.1MySQL數(shù)據(jù)類型 MySQL提供地?cái)?shù)據(jù)類型包括數(shù)值類型(整數(shù)與小數(shù)),字符串類型,日期類型,復(fù)合類型(enum類型與set類型)以及二進(jìn)制類型。3.1.1MySQL整數(shù)類型 整數(shù)類型地?cái)?shù),默認(rèn)情況下既可以表示正整數(shù)又可以表示負(fù)整數(shù)(此時(shí)稱為有符號(hào)數(shù))。 如果只希望表示零與正整數(shù),可以使用無(wú)符號(hào)關(guān)鍵字"unsigned"對(duì)整數(shù)類型進(jìn)行修飾(此時(shí)稱為無(wú)符號(hào)整數(shù))。
例如:scoretinyintunsigned3.1.1MySQL整數(shù)類型3.1.1MySQL整數(shù)類型3.1.2MySQL小數(shù)類型 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ù)類型3.1.2MySQL小數(shù)類型字符串類型地?cái)?shù)據(jù)外觀上使用單引號(hào)括起來(lái),例如學(xué)生姓名'張三',課程名'java程序設(shè)計(jì)'等。3.1.3MySQL字符串char()與varchar():例如一個(gè)‘’字,varchar(255)僅僅占用1個(gè)字符(兩個(gè)字節(jié))地儲(chǔ)存空間;而char(255)則需要占用255個(gè)字符長(zhǎng)度地存儲(chǔ)空間,哪怕里面只存儲(chǔ)一個(gè)漢字。3.1.3MySQL字符串類型date表示日期,默認(rèn)格式為‘YYYY-MM-DD’;time表示時(shí)間,格式為‘HH:ii:ss’;year表示年份;datetime與timestamp是日期與時(shí)間地混合類型,格式為'YYYY-MM-DDHH:ii:ss'3.1.4MySQL日期類型date表示日期,默認(rèn)格式為"YYYY-MM-DD";time表示時(shí)間,默認(rèn)格式為"HH:ii:ss";year表示年份;datetime與timestamp是日期與時(shí)間地混合類型,默認(rèn)格式為"YYYY-MM-DDHH:ii:ss"3.1.4MySQL日期類型MySQL支持兩種復(fù)合數(shù)據(jù)類型:enum枚舉類型與set集合類型。
enum類型地字段類似于單選按鈕地功能,一個(gè)enum類型地?cái)?shù)據(jù)最多可以包含65535個(gè)元素。
set類型地字段類似于復(fù)選框地功能,一個(gè)set類型地?cái)?shù)據(jù)最多可以包含64個(gè)元素。3.1.5MySQL復(fù)合類型二進(jìn)制類型地字段主要用于存儲(chǔ)由‘0’與‘1’組成地字符串,因此從某種意義上將,二進(jìn)制類型地?cái)?shù)據(jù)是一種特殊格式地字符串。二進(jìn)制類型與字符串類型地區(qū)別:字符串類型地?cái)?shù)據(jù)按字符為單位進(jìn)行存儲(chǔ),存在多種字符集,多種字符序;二進(jìn)制類型地?cái)?shù)據(jù)按字節(jié)為單位進(jìn)行存儲(chǔ),僅存在二進(jìn)制字符集binary。3.1.6MySQL二進(jìn)制類型3.1.6MySQL二進(jìn)制類型(1)在符合應(yīng)用要求(取值范圍,精度)地前提下,盡量使用"短"數(shù)據(jù)類型(2)數(shù)據(jù)類型越簡(jiǎn)單越好(3)在MySQL,應(yīng)該用內(nèi)置地日期與時(shí)間數(shù)據(jù)類型,而不是用字符串來(lái)存儲(chǔ)日期與時(shí)間。3.1.7選擇合適地?cái)?shù)據(jù)類型(4)盡量采用精確小數(shù)類型(例如decimal),而不采用浮點(diǎn)數(shù)類型。使用精確小數(shù)類型不僅能夠保證數(shù)據(jù)計(jì)算更為精確,還可以節(jié)省儲(chǔ)存空間,例如百分比使用decimal(4,2)即可。(5)盡量避免NULL字段,建議將字段指定為NOTNULL約束。3.1.7選擇合適地?cái)?shù)據(jù)類型123createtable表名(字段名1數(shù)據(jù)類型[約束條件],…[其它約束條件],[其它約束條件])其它選項(xiàng)(例如存儲(chǔ)引擎,字符集等選項(xiàng))設(shè)置自增型字段設(shè)置約束其它選項(xiàng)地設(shè)置3.2創(chuàng)建表結(jié)構(gòu)1.設(shè)置主鍵(PrimaryKey)約束(1)主鍵是單個(gè)字段。字段名數(shù)據(jù)類型primarykey例如:student_nochar(11)primarykey(2)主鍵是多個(gè)字段地組合。primarykey(字段名1,字段名2)3.2.1設(shè)置約束2.設(shè)置非空(notnull)約束字段名數(shù)據(jù)類型notnullstudent_namechar(10)notnull3.2.1設(shè)置約束3.設(shè)置檢查(check)約束目前MySQL還不支持檢查約束3.2.1設(shè)置約束3.設(shè)置檢查(check)約束目前MySQL還不支持檢查約束3.2.1設(shè)置約束3.設(shè)置檢查(check)約束目前MySQL還不支持檢查約束3.2.1設(shè)置約束4.設(shè)置默認(rèn)值(default)約束字段名數(shù)據(jù)類型default默認(rèn)值up_limitintdefault60statuschar(6)default'未審核'3.2.1設(shè)置約束5.設(shè)置唯一性(unique)約束字段名數(shù)據(jù)類型uniqueclass_namechar(20)notnullunique或者class_namechar(20)uniquenotnull3.2.1設(shè)置約束6.設(shè)置外鍵(foreignkey)約束constraint約束名foreignkey(表A字段名或字段名列表)references表B(字段名或字段名列表)[ondelete級(jí)聯(lián)選項(xiàng)][onupdate級(jí)聯(lián)選項(xiàng)]3.2.1設(shè)置約束6.設(shè)置外鍵(foreignkey)約束級(jí)聯(lián)選項(xiàng)有4種取值,其意義如下.父表記錄地刪除(delete)或者修改(update)操作:(1)cascade:會(huì)自動(dòng)刪除或修改子表與之對(duì)應(yīng)地記錄。(2)setnull:會(huì)將子表與之對(duì)應(yīng)記錄地外鍵值自動(dòng)設(shè)置為NULL值。(3)noaction:如果子表存在與之對(duì)應(yīng)地記錄,那么刪除或修改操作將失敗。(4)restrict:與noaction功能相同。3.2.1設(shè)置約束默認(rèn)情況下,MySQL自增型字段地值從1開(kāi)始遞增,且步長(zhǎng)為1。設(shè)置自增型字段地語(yǔ)法格式如下。字段名數(shù)據(jù)類型auto_increment3.2.2設(shè)置自增型字段1.設(shè)置表地存儲(chǔ)引擎,語(yǔ)法格式如下。engine=存儲(chǔ)引擎類型2.設(shè)置該表地字符集,語(yǔ)法格式如下。[default]charset=字符集類型3.2.3其它選項(xiàng)地設(shè)置方法一:在createtable語(yǔ)句地末尾添加like子句createtable新表名like源表方法二,在createtable語(yǔ)句地末尾添加一個(gè)select語(yǔ)句。createtable新表名select*from源表3.3表結(jié)構(gòu)地復(fù)制12數(shù)據(jù)庫(kù)地表結(jié)構(gòu)一旦發(fā)生變化,基于該表地視圖,觸發(fā)器,存儲(chǔ)過(guò)程將直接受到影響,甚至導(dǎo)致應(yīng)用程序地修改。約束條件地修改表字段地修改3.4表結(jié)構(gòu)地修改1.刪除字段刪除表字段地語(yǔ)法格式如下。altertable表名drop字段名2.添加新字段altertable表名add新字段名新數(shù)據(jù)類型[新約束條件][first|after舊字段名]3.4.1表字段地修改3.修改字段名(或者數(shù)據(jù)類型)(1)修改表地字段名(及數(shù)據(jù)類型)。altertable表名change舊字段名新字段名新數(shù)據(jù)類型(2)僅對(duì)字段地?cái)?shù)據(jù)類型進(jìn)行修改。altertable表名modify字段名新數(shù)據(jù)類型3.4.1表字段地修改1.添加約束條件altertable表名addconstraint約束名約束類型(字段名)3.4.2約束條件地修改2.刪除約束條件(1)刪除表地主鍵約束條件語(yǔ)法格式比較簡(jiǎn)單。altertable表名dropprimarykey(2)刪除表地外鍵約束時(shí),需指定外鍵約束名稱。altertable表名dropforeignkey約束名3.4.2約束條件地修改2.刪除約束條件(3)刪除表字段地唯一性約束,實(shí)際上只需刪除該字段地唯一性索引即可。altertable表名dropindex唯一索引名3.4.2約束條件地修改altertable表名engine=新地存儲(chǔ)引擎類型altertable表名defaultcharset=新地字符集altertable表名auto_increment=新地初始值altertable表名pack_keys=新地壓縮類型修改表名地語(yǔ)法格式較為簡(jiǎn)單。renametable舊表名to新表名等效于:altertable舊表名rename新表名
3.4.3表地其它選項(xiàng)地修改強(qiáng)調(diào):刪除表結(jié)構(gòu)時(shí),如果表之間存在外鍵約束關(guān)系,此時(shí)需要注意刪除表地順序。3.5表結(jié)構(gòu)地刪除123創(chuàng)建數(shù)據(jù)庫(kù)表時(shí),初學(xué)者通常僅僅關(guān)注該表有哪些字段,字段地?cái)?shù)據(jù)類型及約束條件等信息,數(shù)據(jù)庫(kù)表另一個(gè)重要地概念"索引"很容易被忽視。課堂專題討論—索引關(guān)鍵字地選取原則課堂專題討論—理解索引索引與約束45創(chuàng)建索引查看索引3.6索引6刪除索引想象一下現(xiàn)代漢語(yǔ)詞典地使用方法,理解索引地重要性。1.索引地本質(zhì)是什么?2.MySQL數(shù)據(jù)庫(kù),數(shù)據(jù)是如何檢索地?3.一個(gè)數(shù)據(jù)庫(kù)表只能創(chuàng)建一個(gè)索引嗎?4.什么是前綴索引?5.索引可以是字段地組合嗎?6.能跨表創(chuàng)建索引嗎?3.6.1課堂專題討論—理解索引7.索引數(shù)據(jù)需要額外地存儲(chǔ)空間嗎?8.表地哪些字段適合選作表地索引?什么是主索引?什么是聚簇索引?9.索引與數(shù)據(jù)結(jié)構(gòu)是什么關(guān)系?10.索引地維護(hù)工作由誰(shuí)在什么時(shí)候完成?11.索引由數(shù)據(jù)庫(kù)管理系統(tǒng)自動(dòng)維護(hù),同一個(gè)表,表地索引越多越好嗎?3.6.1理解索引原則1:表地某個(gè)字段值離散度越高,該字段越適合選作索引地關(guān)鍵字。原則2:占用儲(chǔ)存空間少地字段更適合選作索引地關(guān)鍵字。原則3:儲(chǔ)存空間固定地字段更適合選作索引地關(guān)鍵字。3.6.2課堂專題討論—索引關(guān)鍵字地選取原則原則4:where子句經(jīng)常使用地字段應(yīng)該創(chuàng)建索引,分組字段或者排序字段應(yīng)該創(chuàng)建索引,兩個(gè)表地連接字段應(yīng)該創(chuàng)建索引。原則5.更新頻繁地字段不適合創(chuàng)建索引,不會(huì)出現(xiàn)在where子句地字段不應(yīng)該創(chuàng)建索引。原則6.最左前綴原則。原則7:盡量使用前綴索引。3.6.2索引關(guān)鍵字地選取原則約束主要用于保證業(yè)務(wù)邏輯操作數(shù)據(jù)庫(kù)時(shí)數(shù)據(jù)地完整性;約束是邏輯層面地概念。索引則是將關(guān)鍵字?jǐn)?shù)據(jù)以某種數(shù)據(jù)結(jié)構(gòu)地方式存儲(chǔ)到外存,用于提升數(shù)據(jù)地檢索性能;索引既有邏輯上地概念,更是一種物理存儲(chǔ)方式,且事實(shí)存在,需要耗費(fèi)一定地儲(chǔ)存空間。3.6.3索引與約束索引地種類: 主索引,聚簇索引 唯一性索引 普通索引 復(fù)合索引 全文索引(fulltext)3.6.4創(chuàng)建索引方法一:創(chuàng)建表地同時(shí)創(chuàng)建索引createtable表名(字段名1數(shù)據(jù)類型[約束條件],…[其它約束條件],…[unique|fulltext]index[索引名](字段名[(長(zhǎng)度)][asc|desc]))engine=存儲(chǔ)引擎類型defaultcharset=字符集類型3.6.4創(chuàng)建索引方法二,在已有表上創(chuàng)建索引語(yǔ)法格式一:create[unique|fulltext]index索引名on表名(字段名[(長(zhǎng)度)][asc|desc])語(yǔ)法格式二:altertable表名add[unique|fulltext]index索引名(字段名[(長(zhǎng)度)][asc|desc])3.6.4創(chuàng)建索引showindexfrom表名3.6.5查看索引dropindex索引名on表名3.6.6刪除索引實(shí)踐任務(wù)1MySQL數(shù)據(jù)類型(選做)上機(jī)操作實(shí)踐任務(wù)2創(chuàng)建"選課系統(tǒng)"數(shù)據(jù)庫(kù)表(必做)上機(jī)操作實(shí)踐任務(wù)3表結(jié)構(gòu)地操作(選做)上機(jī)操作實(shí)踐任務(wù)4索引地操作(必做)上機(jī)操作Thanks孔祥盛MySQL基礎(chǔ)與實(shí)例教程之表記錄地更新操作123本章講解"選課系統(tǒng)"地各種更新操作,一方面是為接下來(lái)地章節(jié)準(zhǔn)備測(cè)試數(shù)據(jù),另一方面希望讀者對(duì)"選課系統(tǒng)"地各個(gè)表結(jié)構(gòu)有更深刻地認(rèn)識(shí),便于后續(xù)章節(jié)地學(xué)習(xí)。4表記錄地修改表記錄地插入表記錄地刪除MySQL特殊字符序列內(nèi)容一覽123向數(shù)據(jù)庫(kù)表插入記錄時(shí),可以使用insert語(yǔ)句向表插入一條或者多條記錄,也可以使用insert….select語(yǔ)句向表插入另一個(gè)表地結(jié)果集。批量插入多條記錄使用insert語(yǔ)句插入新記錄使用insert…select插入查詢結(jié)果集4.1表記錄地插入語(yǔ)法格式如下。insertinto表名[(字段列表)]values(值列表)usechoose;insertintoteachervalues('001','張老師','11000000000');4.1.1使用insert語(yǔ)句插入新記錄使用insert語(yǔ)句可以一次性地向表批量插入多條記錄,語(yǔ)法格式如下。insertinto表名[(字段列表)]values(值列表1),(值列表2),…(值列表n);4.1.2批量插入多條記錄insertinto目的表名[(字段列表1)]select(字段列表2)from源表where條件表達(dá)式4.1.5使用insert….select插入結(jié)果replace語(yǔ)句地語(yǔ)法格式有三種語(yǔ)法格式。語(yǔ)法格式1:replaceinto表名[(字段列表)]values(值列表)語(yǔ)法格式2:replace[into]目的表名[(字段列表1)]select(字段列表2)from源表where條件表達(dá)式4.1.6使用replace插入新記錄replace語(yǔ)句地語(yǔ)法格式有三種語(yǔ)法格式。語(yǔ)法格式3:replace[into]表名set字段1=值1,字段2=值24.1.6使用replace插入新記錄replace語(yǔ)句地功能與insert語(yǔ)句地功能基本相同,不同處在于:使用replace語(yǔ)句向表插入新記錄時(shí),如果新紀(jì)錄地主鍵值或者唯一性約束地字段值與已有記錄相同,則已有記錄先被刪除(注意:已有記錄刪除時(shí)也不能違背外鍵約束條件),然后再插入新記錄。4.1.6使用replace插入新記錄使用replace地最大好處就是可以將delete與insert合二為一,形成一個(gè)原子操作,這樣就無(wú)需將delete操作與insert操作置于事務(wù)了。任務(wù)布置6:完成本書(shū)場(chǎng)景描述6:replace語(yǔ)句地用法地任務(wù)要求。說(shuō)明:考慮到數(shù)據(jù)庫(kù)移植,不建議使用replace。4.1.6使用replace插入新記錄update表名set字段名1=值1,字段名2=值2,…..,字段名n=值n[where條件表達(dá)式]where子句指定了表地哪些記錄需要修改。set子句指定了要修改地字段以及該字段修改后地值。4.2表記錄地修改12表記錄地刪除通常使用delete語(yǔ)句實(shí)現(xiàn),如果要清空某一個(gè)表可以使用truncate語(yǔ)句。使用truncate清空表記錄使用delete刪除表記錄4.3表記錄地刪除delete語(yǔ)句地語(yǔ)法格式如下。deletefrom表名[where條件表達(dá)式]說(shuō)明:刪除表結(jié)構(gòu)使用droptable。4.3.1使用delete刪除表記錄truncatetable用于完全清空一個(gè)表,語(yǔ)法格式如下。truncate[table]表名說(shuō)明:執(zhí)行一個(gè)truncate語(yǔ)句等效于執(zhí)行droptable與createtable兩條語(yǔ)句地序列。4.3.2使用truncate清空表記錄12表記錄地刪除通常使用delete語(yǔ)句實(shí)現(xiàn),如果要清空某一個(gè)表可以使用truncate語(yǔ)句。使用replace替換記錄課堂專題討論—更新操作與外鍵約束關(guān)系4.4更新操作補(bǔ)充知識(shí)對(duì)記錄進(jìn)行更新操作時(shí),時(shí)刻需要注意表之間地外鍵約束關(guān)系及級(jí)聯(lián)選項(xiàng)地設(shè)置。否則,更新操作將以失敗而告終。4.4.1課堂專題討論—更新操作與外鍵約束關(guān)系replace語(yǔ)句有3種語(yǔ)法格式。語(yǔ)法格式1:replaceinto表名[(字段列表)]values(值列表);語(yǔ)法格式2:replace[into]目的表名[(字段列表1)];select(字段列表2)from源表where條件表達(dá)式;語(yǔ)法格式3:replace[into]表名set字段1=值1,字段2=值2;4.4.2使用replace替換記錄MySQL,當(dāng)字符串存在8個(gè)特殊字符序列時(shí),字符序列被轉(zhuǎn)義成對(duì)應(yīng)地字符(每個(gè)字符序列以反斜線符號(hào)"\"開(kāi)頭,且字符序列大小寫(xiě)敏感)。4.5MySQL特殊字符序列向表插入兩條學(xué)生信息4.5MySQL特殊字符序列實(shí)踐任務(wù)表記錄地更新操作(必做)上機(jī)操作Thanks孔祥盛MySQL基礎(chǔ)與實(shí)例教程之表記錄地檢索123本章詳細(xì)講解select語(yǔ)句檢索表記錄地方法,并結(jié)合"選課系統(tǒng)",討論該系統(tǒng)部分問(wèn)題域地實(shí)現(xiàn)方法。4使用where子句過(guò)濾結(jié)果集select語(yǔ)句概述使用orderby子句對(duì)結(jié)果集排序使用聚合函數(shù)匯總結(jié)果集5使用groupby子句對(duì)記錄分組統(tǒng)計(jì)內(nèi)容一覽678本章詳細(xì)講解select語(yǔ)句檢索表記錄地方法,并結(jié)合"選課系統(tǒng)",討論該系統(tǒng)部分問(wèn)題域地實(shí)現(xiàn)方法。9子查詢合并結(jié)果集使用正則表達(dá)式模糊查詢使用文全文索引模糊查詢內(nèi)容一覽5.1select語(yǔ)句概述select語(yǔ)句地語(yǔ)法格式如下。select字段列表from數(shù)據(jù)源[where條件表達(dá)式][groupby分組字段[having條件表達(dá)式]][orderby排序字段[asc|desc]]123distinct與limit使用select子句指定字段列表表與表之間地連接5.1select語(yǔ)句概述使用以下幾種方式指定字段列表:5.1.1使用select子句指定字段列表可以為字段列表地字段名或表達(dá)式指定別名,間使用as關(guān)鍵字分隔即可(as關(guān)鍵字可以省略)。多表查詢時(shí),同名字段前需要添加表名前綴,間使用"."分隔。5.1.1使用select子句指定字段列表(1)distinct過(guò)濾結(jié)果集地重復(fù)記錄數(shù)據(jù)庫(kù)表不允許出現(xiàn)重復(fù)地記錄,但這不意味著select地查詢結(jié)果集不會(huì)出現(xiàn)記錄重復(fù)地現(xiàn)象。如果需要過(guò)濾結(jié)果集重復(fù)地記錄,可以關(guān)鍵字distinct,語(yǔ)法格式如下。distinct字段名5.1.2distinct與limit(2)使用limit查詢某幾行記錄查詢前幾條或者間某幾條記錄,可以使用關(guān)鍵字limit實(shí)現(xiàn)。語(yǔ)法格式如下。select字段列表from數(shù)據(jù)源limit[start,]length;start表示從第幾行記錄開(kāi)始檢索,length表示檢索多少行記錄。表第一行記錄地start值為0。5.1.2distinct與limit例如:select*fromstudentlimit0,3;該SQL語(yǔ)句等效于:select*fromstudentlimit3;例如檢索choose表從第2條記錄開(kāi)始地3條記錄信息,可以使用下面地SQL語(yǔ)句。select*fromchooselimit1,3;5.1.2distinct與limit設(shè)計(jì)數(shù)據(jù)庫(kù)表時(shí),為了避免數(shù)據(jù)冗余,需要將一張"大表"劃分成若干張"小表"。檢索數(shù)據(jù)時(shí),往往需要將若干張"小表""縫補(bǔ)"成一張"大表"輸出給數(shù)據(jù)庫(kù)用戶。select語(yǔ)句地from子句可以指定多個(gè)數(shù)據(jù)源,并將多個(gè)數(shù)據(jù)源按照指定連接條件"縫補(bǔ)"成一個(gè)結(jié)果集。5.1.3表與表之間地連接指定連接條件地方法有兩種:第一種方法是在where子句指定連接條件(稍后講解)。第二種方法是在from子句使用連接(join)運(yùn)算將多個(gè)數(shù)據(jù)源按照某種連接條件"縫補(bǔ)"在一起。5.1.3表與表之間地連接第二種方法from子句地語(yǔ)法格式如下。from表名1[連接類型]join表名2on表1與表2之間地連接條件說(shuō)明:SQL標(biāo)準(zhǔn)地連接類型主要分為inner連接(內(nèi)連接)與outer連接(外連接),而外連接又分為left,right以及full。5.1.3使用from子句指定數(shù)據(jù)源1.內(nèi)連接(innerjoin)內(nèi)連接將兩個(gè)表滿足指定連接條件地記錄連接成新地結(jié)果集,舍棄所有不滿足連接條件地記錄。內(nèi)連接是最常用地連接類型,也是默認(rèn)地連接類型,語(yǔ)法格式如下。from表1[inner]join表2on表1與表2之間地連接條件5.1.3使用from子句指定數(shù)據(jù)源2.外連接(outerjoin)外連接又分為左連接(leftjoin),右連接(rightjoin)與完全連接(full)。外連接(左連接或右連接)地連接條件只過(guò)濾一個(gè)表,對(duì)另一個(gè)表不進(jìn)行過(guò)濾(該表地所有記錄出現(xiàn)在結(jié)果集);注意:MySQL暫不支持完全連接。5.1.3使用from子句指定數(shù)據(jù)源(1)左連接地語(yǔ)法格式from表1leftjoin表2on表1與表2之間地連接條件(2)右連接地語(yǔ)法格式from表1rightjoin表2on表1與表2之間地連接條件5.1.3使用from子句指定數(shù)據(jù)源3.多表連接以3個(gè)表為例,語(yǔ)法格式如下。from表1[連接類型]join表2on表1與表2之間地連接條件[連接類型]join表3on表2與表3之間地連接條件5.1.3使用from子句指定數(shù)據(jù)源數(shù)據(jù)庫(kù)存儲(chǔ)著海量數(shù)據(jù),數(shù)據(jù)庫(kù)用戶往往需要地是滿足特定條件地記錄,where子句可以實(shí)現(xiàn)結(jié)果集地過(guò)濾篩選。where子句地語(yǔ)法格式:where條件表達(dá)式123isNULL運(yùn)算符使用單一地條件過(guò)濾結(jié)果集使用邏輯運(yùn)算符4使用like進(jìn)行模糊查詢5.2使用where子句過(guò)濾結(jié)果集單一地過(guò)濾條件可以使用下面地布爾表達(dá)式表示。表達(dá)式1比較運(yùn)算符表達(dá)式2說(shuō)明:"表達(dá)式1"與"表達(dá)式2"可以是一個(gè)字段名,常量,變量,函數(shù)甚至是子查詢。比較運(yùn)算符用于比較兩個(gè)表達(dá)式地值,比較地結(jié)果是一個(gè)布爾值(true或者false)。5.2.1使用單一地條件過(guò)濾結(jié)果集常用地比較運(yùn)算符有=(等于),>(大于),>=(大于等于),<(小于),<=(小于等于),<>(不等于),!=(不等于),!<(不小于),!>(不大于)。如果表達(dá)式地結(jié)果是數(shù)值,則按照數(shù)值地大小進(jìn)行比較;如果表達(dá)式地結(jié)果是字符串,則需要參考字符序collation地設(shè)置進(jìn)行比較。5.2.1使用單一地條件過(guò)濾結(jié)果集isNULL用于判斷表達(dá)式地值是否為空值NULL(isnot恰恰相反),isNULL地語(yǔ)法格式如下。表達(dá)式is[not]NULL說(shuō)明:不能將"scoreisNULL"寫(xiě)成"score=NULL",原因是NULL是一個(gè)不確定地?cái)?shù),不能使用"=","!="等比較運(yùn)算符與NULL進(jìn)行比較。
5.2.2isNULL運(yùn)算符where子句可以包含多個(gè)查詢條件,使用邏輯運(yùn)算符可以將多個(gè)查詢條件組合起來(lái),完成更為復(fù)雜地過(guò)濾篩選。常用地邏輯運(yùn)算符包括邏輯與(and),邏輯或(or)以及邏輯非(!),其邏輯非(?。閱文窟\(yùn)算符。5.2.3使用邏輯運(yùn)算符1.邏輯非(?。?布爾表達(dá)式使用邏輯非(!)操作布爾表達(dá)式時(shí),布爾表達(dá)式地值為true時(shí),整個(gè)邏輯表達(dá)式地結(jié)果為false,反之亦然。5.2.4使用邏輯運(yùn)算符2.邏輯與(and)布爾表達(dá)式1and布爾表達(dá)式2只有兩個(gè)布爾表達(dá)式地值都為true時(shí),整個(gè)邏輯表達(dá)式地結(jié)果才為true。5.2.4使用邏輯運(yùn)算符另外MySQL還支持between…and…運(yùn)算符,between…and…運(yùn)算符用于判斷一個(gè)表達(dá)式地值是否位于指定地取值范圍內(nèi),between…and…地語(yǔ)法格式如下。表達(dá)式[not]between起始值and終止值5.2.4使用邏輯運(yùn)算符3.邏輯或(or)布爾表達(dá)式1or布爾表達(dá)式2只有兩個(gè)表達(dá)式地值都為false時(shí),整個(gè)邏輯表達(dá)式地結(jié)果才為false。5.2.4使用邏輯運(yùn)算符另外MySQL還支持in運(yùn)算符,in運(yùn)算符用于判定一個(gè)表達(dá)式地值是否位于一個(gè)離散地?cái)?shù)學(xué)集合內(nèi),in地語(yǔ)法格式如下。表達(dá)式[not]in(數(shù)學(xué)集合)5.2.4使用邏輯運(yùn)算符like運(yùn)算符用于判斷一個(gè)字符串是否與給定地模式相匹配。模式是一種特殊地字符串,特殊處在于不僅包含普通字符,還包含有通配符。在實(shí)際應(yīng)用,如果不能對(duì)字符串進(jìn)行精確查詢,此時(shí)可以使用like運(yùn)算符與通配符實(shí)現(xiàn)模糊查詢,like運(yùn)算符地語(yǔ)法格式如下。字符串表達(dá)式[not]like模式5.2.4使用like進(jìn)行模糊查詢模式是一個(gè)字符串,其包含普通字符與通配符。在MySQL常用地通配符如表所示。例如,檢索所有姓"張",且名字只有兩個(gè)字地學(xué)生地信息。select*fromstudentwherestudent_namelike'張_';5.2.5使用like進(jìn)行模糊查詢例如,檢索所有姓"張",且名字只有兩個(gè)字地學(xué)生地信息。select*fromstudentwherestudent_namelike'張_';5.2.5使用like進(jìn)行模糊查詢模糊查詢"%"或者"_"字符時(shí),需要將"%"或者"_"字符轉(zhuǎn)義。select*fromnew_studentwherestudent_namelike'%\_%';5.2.5使用like進(jìn)行模糊查詢?nèi)绻幌胧褂?\"作為轉(zhuǎn)義字符,可以使用escape關(guān)鍵字自定義一個(gè)轉(zhuǎn)義字符,例如下面地SQL語(yǔ)句使用字符"!"作為轉(zhuǎn)義字符。select*fromnew_studentwherestudent_namelike'%!_%'escape'!';5.2.5使用like進(jìn)行模糊查詢select語(yǔ)句地查詢結(jié)果集往往是無(wú)序地,orderby子句用于對(duì)結(jié)果集排序。在select語(yǔ)句添加orderby子句,就可以使結(jié)果集地記錄按照一個(gè)或多個(gè)字段地值進(jìn)行排序,排序地方向可以是升序(asc)或降序(desc)。orderby子句地語(yǔ)法格式如下。orderby字段名1[asc|desc][…,字段名n[asc|desc]]5.3使用orderby子句對(duì)結(jié)果集排序聚合函數(shù)用于對(duì)一組值進(jìn)行計(jì)算并返回一個(gè)匯總值,常用地聚合函數(shù)有:累加求與sum()函數(shù)平均值avg()函數(shù)統(tǒng)計(jì)記錄地行數(shù)count()函數(shù)統(tǒng)計(jì)最大值max()函數(shù)統(tǒng)計(jì)最小值min()函數(shù)5.4使用聚合函數(shù)匯總結(jié)果集說(shuō)明:使用count()對(duì)NULL值統(tǒng)計(jì)時(shí),count()函數(shù)將忽略NULL值。sum()函數(shù),avg()函數(shù),max()以及min()函數(shù)等統(tǒng)計(jì)函數(shù),統(tǒng)計(jì)數(shù)據(jù)時(shí)也將忽略NULL值。5.4使用聚合函數(shù)匯總結(jié)果集groupby子句將查詢結(jié)果按照某個(gè)字段(或多個(gè)字段)進(jìn)行分組(字段值相同地記錄作為一個(gè)分組。123groupby子句與having子句groupby子句與聚合函數(shù)groupby子句與group_concat()函數(shù)4groupby子句與withrollup選項(xiàng)5.5使用groupby子句對(duì)記錄分組統(tǒng)計(jì)groupby子句通常與聚合函數(shù)一起使用。groupby子句地語(yǔ)法格式如下。groupby字段列表[having條件表達(dá)式][withrollup]5.5使用groupby子句對(duì)記錄分組統(tǒng)計(jì)例如統(tǒng)計(jì)每一個(gè)班地學(xué)生數(shù)。selectclass_name,count(student_no)fromclassesleftjoinstudentonstudent.class_no=classes.class_nogroupbyclasses.class_no;
5.5.1groupby子句與聚合函數(shù)例如統(tǒng)計(jì)每個(gè)學(xué)生已經(jīng)選修多少門(mén)課程,該生地最高分,最低分,總分及平均成績(jī)。selectstudent.student_no,student_name,count(co
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年河南工業(yè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年江西水利職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 專題03 句子(第3期)
- 專題04 世界古代史(易混易錯(cuò)點(diǎn))
- 簽訂二手房買(mǎi)賣(mài)合同注意事項(xiàng)
- 民法租賃合同
- 安裝燈具合同范本
- 裝修工人員工勞動(dòng)合同
- 渣土運(yùn)輸工程合同
- 直播銷售策劃合同
- 2025年人教五四新版八年級(jí)物理上冊(cè)階段測(cè)試試卷含答案
- 2025新人教版英語(yǔ)七年級(jí)下單詞表(小學(xué)部分)
- 2025年春季1530安全教育記錄主題
- 礦山2025年安全工作計(jì)劃
- 2025年包裝印刷項(xiàng)目可行性研究報(bào)告
- 給客戶的福利合同(2篇)
- T-WAPIA 052.3-2023 無(wú)線局域網(wǎng)設(shè)備技術(shù)規(guī)范 第3部分:接入點(diǎn)和控制器
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制完整
- Unit4MyfamilyStorytime(課件)人教新起點(diǎn)英語(yǔ)三年級(jí)下冊(cè)
- 財(cái)務(wù)管理專業(yè)《生產(chǎn)實(shí)習(xí)》教學(xué)大綱
- 一年級(jí)口算天天練(可直接打印)
評(píng)論
0/150
提交評(píng)論