




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、a,1,MySQL基礎(chǔ)教程 適合新手,適合老手!,a,2,孔祥盛,MySQL數(shù)據(jù)庫基礎(chǔ)與實(shí)例教程 之 數(shù)據(jù)庫設(shè)計(jì)概述,a,3,1,2,3,本章拋開MySQL講解關(guān)系數(shù)據(jù)庫設(shè)計(jì)的相關(guān)知識(shí),以“選課系統(tǒng)”為例,講解“選課系統(tǒng)”數(shù)據(jù)庫的設(shè)計(jì)流程。,4,內(nèi)容一覽,數(shù)據(jù)庫設(shè)計(jì)的相關(guān)知識(shí),數(shù)據(jù)庫概述,E-R圖,關(guān)系數(shù)據(jù)庫設(shè)計(jì),a,4,1,2,3,簡單地說:數(shù)據(jù)庫(Database或DB)是存儲(chǔ)、管理數(shù)據(jù)的容器; 嚴(yán)格地說:數(shù)據(jù)庫是“按照某種數(shù)據(jù)結(jié)構(gòu)對(duì)數(shù)據(jù)進(jìn)行組織、存儲(chǔ)和管理的容器”。 總結(jié):數(shù)據(jù)永遠(yuǎn)是數(shù)據(jù)庫的核心。,關(guān)系數(shù)據(jù)庫,關(guān)系數(shù)據(jù)庫管理系統(tǒng),結(jié)構(gòu)化查詢語言SQL,1.1 數(shù)據(jù)庫概述,1.1.1 關(guān)系
2、數(shù)據(jù)庫管理系統(tǒng),通過“數(shù)據(jù)庫管理系統(tǒng)”,數(shù)據(jù)庫用戶可以輕松地實(shí)現(xiàn)數(shù)據(jù)庫容器中各種數(shù)據(jù)庫對(duì)象的訪問(增、刪、改、查等操作),并可以輕松地完成數(shù)據(jù)庫的維護(hù)工作(備份、恢復(fù)、修復(fù)等操作),數(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ù)庫對(duì)象、數(shù)據(jù)庫文件的接口。,1.1.1 關(guān)系數(shù)據(jù)庫管理系統(tǒng),a,7,添加標(biāo)題,添加標(biāo)題,a,8,層次模型,面向?qū)ο竽P?網(wǎng)狀模型,關(guān)系模型,數(shù)據(jù)庫管理 系統(tǒng)常用的 數(shù)學(xué)模型,添加標(biāo)題,基于“關(guān)系模型”的數(shù)據(jù)庫管理系統(tǒng)稱為關(guān)系數(shù)據(jù)庫管
3、理系統(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),2014年2月數(shù)據(jù)庫流行度排行榜,截至目前,MySQL已經(jīng)成功逆襲!,1.1.1 關(guān)系數(shù)據(jù)庫管理系統(tǒng),2014年3月數(shù)據(jù)庫流行度排行榜,1.1.1 關(guān)系數(shù)據(jù)庫管理系統(tǒng),2014年4月數(shù)據(jù)庫流行度排行榜,1.1.1 關(guān)系數(shù)據(jù)庫管理系統(tǒng),開源,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),關(guān)系數(shù)據(jù)庫中所謂的“關(guān)系”
4、,實(shí)質(zhì)上是一張二維表。請看下面的課程表。,字段名(列名),第1個(gè)字段(列),第1條記錄,第2條記錄,第3條記錄,第4條記錄,第5條記錄,第3個(gè)字段(列),第2個(gè)字段(列),第4個(gè)字段(列),1.1.2 關(guān)系數(shù)據(jù)庫,作為數(shù)據(jù)庫中最為重要的數(shù)據(jù)庫對(duì)象,數(shù)據(jù)庫表的設(shè)計(jì)過程并非一蹴而就,上述課程表根本無法滿足“選課系統(tǒng)”的功能需求。 事實(shí)上,數(shù)據(jù)庫表的設(shè)計(jì)過程并非如此簡單,本章的重點(diǎn)就是討論如何設(shè)計(jì)結(jié)構(gòu)良好的數(shù)據(jù)庫表。,1.1.2 關(guān)系數(shù)據(jù)庫,結(jié)構(gòu)化查詢語言(Structured Query Language或簡稱為SQL)是一種應(yīng)用最為廣泛的關(guān)系數(shù)據(jù)庫語言,該語言定義了操作關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語法,幾乎
5、所有的關(guān)系數(shù)據(jù)庫管理系統(tǒng)都支持SQL。,1.1.3 結(jié)構(gòu)化查詢語言SQL,學(xué)習(xí)重點(diǎn),a,18,1,2,3,數(shù)據(jù)庫設(shè)計(jì)是一個(gè)“系統(tǒng)工程”,要求數(shù)據(jù)庫開發(fā)人員: 熟悉“商業(yè)領(lǐng)域”的商業(yè)知識(shí)。 利用“管理學(xué)”的知識(shí)與其他開發(fā)人員進(jìn)行有效溝通。 掌握一些數(shù)據(jù)庫設(shè)計(jì)輔助工具。,數(shù)據(jù)庫設(shè)計(jì)輔助工具,商業(yè)知識(shí)和溝通技能,“選課系統(tǒng)”概述,4,5,定義問題域,編碼規(guī)范,1.2 數(shù)據(jù)庫設(shè)計(jì)的相關(guān)知識(shí),數(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í)和溝
6、通技能,1.2.2 數(shù)據(jù)庫設(shè)計(jì)輔助工具,面向?qū)ο蠓治龊驮O(shè)計(jì)技術(shù) 結(jié)構(gòu)化分析和設(shè)計(jì)技術(shù) 軟件測試技術(shù) 關(guān)系數(shù)據(jù)庫設(shè)計(jì)技術(shù),Erwin PowerDesigner Rational Rose Visio,VC+6.0 Visual studio Eclipse NetBeans,單元測試工具 功能測試工具 性能測試 工具,程序流程圖 DFD 時(shí)序圖 狀態(tài)圖,CASE工具 IDE工具 測試工具,數(shù)據(jù)模型,類圖,E-R圖,限于篇幅,在不影響“選課系統(tǒng)”核心功能的基礎(chǔ)上,適當(dāng)?shù)貙?duì)該系統(tǒng)進(jìn)行“定制”、“擴(kuò)展”以及“瘦身”。,1.2.3 “選課系統(tǒng)”概述,定義問題域是數(shù)據(jù)庫設(shè)計(jì)過程中重要的活動(dòng),它的目標(biāo)是準(zhǔn)
7、確定義要解決的商業(yè)問題。 “選課系統(tǒng)”亟需解決的“商業(yè)”問題有哪些?,1.2.4 定義問題域,在編程的時(shí)候會(huì)考慮代碼的可讀性嗎?你覺得代碼可讀性是需要考慮的問題嗎? 1. 代碼不僅要自己能讀懂,還要?jiǎng)e人也能看懂? 2. 盡量做到可讀,但時(shí)間緊任務(wù)重的時(shí)候就顧不上了? 3. 代碼只要自己能讀懂就可以了? 4. 代碼寫完就完了,不用管以后是否能讀懂? 5. 不知道,沒有想過這個(gè)問題?,1.2.5 編碼規(guī)范,a,24,請記?。罕M最大努力把方便留給別人和將來的自己。,建議大家遵循本書羅列的常用編程規(guī)范!,a,25,1,2,3,關(guān)系,實(shí)體和屬性,E-R圖的設(shè)計(jì)原則,E-R圖設(shè)計(jì)的質(zhì)量直接決定了關(guān)系數(shù)據(jù)庫
8、設(shè)計(jì)的質(zhì)量。,1.3 E-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)的數(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)
9、系,使用關(guān)聯(lián)(Association)表示實(shí)體間關(guān)系的屬性。,關(guān)聯(lián),關(guān)聯(lián),1.3.2 關(guān)系,1,2,3,實(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ù)庫開發(fā)人員通常采用“一事一地”的原則從系統(tǒng)的功能描述中抽象出來E-R圖。,1.3.3 E-R圖的設(shè)計(jì)原則,a,32,1為E-R圖中的每個(gè)實(shí)體建立一張表。 2為每張表定義一個(gè)主鍵(如果需要,可以向表添加一個(gè)沒有實(shí)際意義的字段作為該表的主鍵) 3增加外鍵表示一對(duì)多關(guān)系。 4建立新表表示多對(duì)多關(guān)系。 5為字段選擇合適的數(shù)據(jù)類型
10、。 6定義約束條件(如果需要)。 7評(píng)價(jià)關(guān)系的質(zhì)量,并進(jìn)行必要的改進(jìn)。,1.4 關(guān)系數(shù)據(jù)庫設(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ù)庫表,關(guān)鍵字(key):用以唯一標(biāo)識(shí)表中的每行記錄。 主鍵(Primary Key):在所有的關(guān)鍵字中選擇
11、一個(gè)關(guān)鍵字,作為該表的主關(guān)鍵字,簡稱主鍵。,1.4.2 為每張表定義一個(gè)主鍵,主鍵有以下兩個(gè)特征: (1)表的主鍵可以是一個(gè)字段,也可以是多個(gè)字段的組合(這種情況稱為復(fù)合主鍵)。 (2)表中主鍵的值具有唯一性且不能取空值(NULL);當(dāng)表中的主鍵由多個(gè)字段構(gòu)成時(shí),每個(gè)字段的值都不能取NULL。 主鍵設(shè)計(jì)技巧,請參看本書內(nèi)容。,1.4.2 為每張表定義一個(gè)主鍵,student(student_no,student_name,student_contact) course(course_no,course_name,up_limit,description,status) teacher(teac
12、her_no,teacher_name,teacher_contact) classes(class_no,class_name,department_name),1.4.2 為每張表定義一個(gè)主鍵,外鍵(Foreign Key):如果表A中的一個(gè)字段a對(duì)應(yīng)于表B的主鍵b,則字段a稱為表A的外鍵,此時(shí)存儲(chǔ)在表A中字段a的值,要么是NULL,要么是來自于表B主鍵b的值。,1.4.3 增加外鍵表示一對(duì)多關(guān)系,情形一:如果實(shí)體間的關(guān)系為一對(duì)多關(guān)系,則需要將“一”端實(shí)體的主鍵放到“多”端實(shí)體中,然后作為“多”端實(shí)體的外鍵,通過該外鍵即可表示實(shí)體間的一對(duì)多關(guān)系。,1.4.3 增加外鍵表示一對(duì)多關(guān)系,讓學(xué)生
13、記住所在班級(jí),遠(yuǎn)比班級(jí)“記住”所有學(xué)生容易的多 。,1.4.3 增加外鍵表示一對(duì)多關(guān)系,情形二:實(shí)體間的一對(duì)一關(guān)系,可以看成一種特殊的一對(duì)多關(guān)系:將“一”端實(shí)體的主鍵放到另“一”端的實(shí)體中,并作為另“一”端的實(shí)體的外鍵,然后將外鍵定義為唯一性約束(Unique Constraint)。,1.4.3 增加外鍵表示一對(duì)多關(guān)系,PK,1.4.3 增加外鍵表示一對(duì)多關(guān)系,PK后的方案:student(student_no,student_name, student_contact,class_no) course(course_no,course_name,up_limit, description,
14、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) class
15、es(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 為字段選擇合適的數(shù)據(jù)類型,常用的約束條件有6種: 主鍵(Prim
16、ary Key)約束 外鍵(Foreign Key)約束 唯一性(Unique)約束 默認(rèn)值(Default)約束 非空(Not NULL)約束 檢查(Check)約束。,1.4.6 定義約束(Constraint)條件,設(shè)計(jì)數(shù)據(jù)庫時(shí),有兩個(gè)不爭的事實(shí)。 數(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 評(píng)價(jià)數(shù)據(jù)庫表設(shè)計(jì)的質(zhì)量,冗余的數(shù)據(jù)需要額外的維護(hù),并且容易導(dǎo)致“數(shù)據(jù)不一致”、“插入異常”以及“刪除異?!钡葐栴}的發(fā)生。,1.4.8 使用規(guī)范化減少數(shù)據(jù)冗余
17、,場景一:插入異常。 場景二:修改復(fù)雜。 場景三:刪除異常。,1.4.8 使用規(guī)范化減少數(shù)據(jù)冗余,規(guī)范化是通過最小化數(shù)據(jù)冗余來提升數(shù)據(jù)庫設(shè)計(jì)質(zhì)量的過程,規(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ù)依賴于
18、主鍵,那么該表滿足第二范式的要求。,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ù)庫開發(fā)人員,應(yīng)該讓學(xué)生上報(bào)年齡信息,還是讓學(xué)生上報(bào)出生日期? 如何確保每一門課程選報(bào)學(xué)生的人數(shù),不超過人數(shù)上限?,1.4.9 避免數(shù)據(jù)經(jīng)常發(fā)生變化,方案一: course(course_no, course_no,course_
19、name, up_limit,description,status,teacher_no, available) 方案二:數(shù)據(jù)庫表無需進(jìn)行任何更改。,1.4.9 避免數(shù)據(jù)經(jīng)常發(fā)生變化,a,60,任務(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ù)布置,a,61,Thanks,a,62,a,63,孔祥盛,MySQL數(shù)據(jù)庫基礎(chǔ)與實(shí)例教程 之 MySQL基礎(chǔ)知識(shí),a,64,1,2,3,通過
20、本章的學(xué)習(xí),讀者可以掌握一些常用的MySQL命令,從而對(duì)MySQL數(shù)據(jù)庫進(jìn)行一些簡單的管理。 本章知識(shí)點(diǎn)較為繁雜,希望保持一份兒耐心。,4,字符集以及字符序設(shè)置,MySQL概述,MySQL數(shù)據(jù)庫管理,MySQL表管理,5,系統(tǒng)變量,內(nèi)容一覽,a,65,1,2,3,MySQL由瑞典MySQL AB公司開發(fā)。 2008年1月MySQL被美國的SUN公司收購。 2009年4月SUN公司又被美國的甲骨文(Oracle)公司收購。,MySQL服務(wù)的安裝,MySQL的特點(diǎn),MySQL服務(wù)的配置,4,5,啟動(dòng)與停止MySQL服務(wù),MySQL配置文件,2.1 MySQL概述,a,66,6,7,MySQL由瑞典
21、MySQL AB公司開發(fā)。 2008年1月MySQL被美國的SUN公司收購。 2009年4月SUN公司又被美國的甲骨文(Oracle)公司收購。,連接MySQL服務(wù)器關(guān)系數(shù)據(jù)庫,MySQL客戶機(jī),2.1 MySQL概述,MySQL是一個(gè)單進(jìn)程多線程、支持多用戶、基于客戶機(jī)/服務(wù)器(Client/Server簡稱C/S)的關(guān)系數(shù)據(jù)庫管理系統(tǒng) 。 性能高效 跨平臺(tái)支持 簡單易用 開源 支持多用戶,2.1.1 MySQL特點(diǎn),MySQL的使用流程,2.1.1 MySQL特點(diǎn),MySQL其他概念(請參看本書內(nèi)容): MySQL服務(wù) MySQL服務(wù)實(shí)例 MySQL服務(wù)器 端口號(hào),2.1.1 MySQL特
22、點(diǎn),MySQL服務(wù)的安裝(請參看本書內(nèi)容)。 建議自學(xué),并上機(jī)操作。 注意:本書使用的MySQL為5.6版本。可以到本書指定的網(wǎng)址下載MySQL圖形化安裝包mysql-5.6.5-m8-win32.msi。,2.1.2 MySQL服務(wù)的安裝,MySQL服務(wù)的配置(請參看本書內(nèi)容)。 建議自學(xué),并上機(jī)操作。 配置過程中的其他知識(shí)點(diǎn): OLAP與OLTP Enable Strict Mode選項(xiàng) 字符集/字符序 MySQL超級(jí)管理員root賬戶 my.ini配置文件中,2.1.3 MySQL服務(wù)的配置,MySQL服務(wù)的啟動(dòng)與停止(請參看本書內(nèi)容)。 建議自學(xué),并上機(jī)操作。,2.1.4 啟動(dòng)與停止M
23、ySQL服務(wù),my.ini配置文件包含了多種參數(shù)選項(xiàng)組,每個(gè)參數(shù)選項(xiàng)組通過“ ”指定,每個(gè)參數(shù)選項(xiàng)組可以配置多個(gè)參數(shù)信息。通常情況下,每個(gè)參數(shù)遵循“參數(shù)名=參數(shù)值”這種配置格式,參數(shù)名一般是小寫字母,參數(shù)名大小寫敏感。常用的參數(shù)選項(xiàng)組有“client”、“mysql”以及“mysqld”參數(shù)選項(xiàng)組。,2.1.5 MySQL配置文件,client參數(shù)選項(xiàng)組: 配置了MySQL自帶的MySQL5.6 命令行窗口可以讀取的參數(shù)信息。 常用的參數(shù)是port(默認(rèn)值是3306)。 修改該port值會(huì)導(dǎo)致新打開的MySQL5.6 命令行窗口無法連接MySQL服務(wù)器。,2.1.5 MySQL配置文件,mys
24、ql參數(shù)選項(xiàng)組: 配置了MySQL客戶機(jī)程序mysql.exe可以讀取的參數(shù)信息。 常用的參數(shù)有“prompt”、 “default-character-set=gbk”。 修改 “mysql”參數(shù)選項(xiàng)組中的參數(shù)值,將直接影響新打開的MySQL客戶機(jī)。,2.1.5 MySQL配置文件,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.5 MySQL配置文件,mysqld參數(shù)選項(xiàng)組: 常用的參數(shù)有“port”、“basedir”、“data
25、dir”、“character-set-server”、“sql_mode”、“max_connections”以及“default_storage_engine”等。,2.1.5 MySQL配置文件,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ù)無法啟動(dòng)。,2.1.5 MySQL配置文件,MySQL客戶機(jī)(本書使用前兩個(gè)): MySQL5.6命令行窗口 CMD命令提示符窗口 WEB
26、瀏覽器(例如phpMyAdmin) 第三方客戶機(jī)程序(例如MySQL-Front、MySQL Manager for MySQL等),2.1.6 MySQL客戶機(jī),phpMyAdmin,2.1.6 MySQL客戶機(jī),MySQL-Front,2.1.6 MySQL客戶機(jī),MySQL Manager for MySQL,2.1.6 MySQL客戶機(jī),2.1.6 MySQL客戶機(jī),HeidiSQL,MySQL客戶機(jī)連接MySQL服務(wù)器須提供: 合法的登錄主機(jī):解決“from”的問題。 合法的賬戶名以及密碼:解決“who”的問題。 MySQL服務(wù)器主機(jī)名(或IP地址):解決“to”的問題。 端口號(hào):解
27、決“多卡多待”的問題。 MySQL客戶機(jī)與MySQL服務(wù)器是同一臺(tái)主機(jī)時(shí),主機(jī)名可以使用localhost(或者127.0.0.1)。,2.1.7 連接MySQL服務(wù)器,當(dāng)MySQL客戶機(jī)與MySQL服務(wù)器是同一臺(tái)主機(jī)時(shí),打開命令提示符窗口,輸入 mysql -h 127.0.0.1 -P 3306 -u root proot 或者 mysql -h localhost -P 3306 -u root proot 然后回車(注意-p后面緊跟密碼root),即可實(shí)現(xiàn)本地MySQL客戶機(jī)與本地MySQL服務(wù)器之間的成功連接。,2.1.7 連接MySQL服務(wù)器,2.1.7 連接MySQL服務(wù)器,a,
28、87,1,2,3,MySQL由瑞典MySQL AB公司開發(fā),默認(rèn)情況下MySQL使用的是latin1字符集。 由此可能導(dǎo)致MySQL數(shù)據(jù)庫不夠支持中文字符串查詢或者發(fā)生中文字符串亂碼等問題。,MySQL字符集與字符序,字符集及字符序概念,MySQL的字符集轉(zhuǎn)換過程,4,5,MySQL字符集的設(shè)置,SQL腳本文件,2.2 字符集以及字符序設(shè)置,字符(Character)是人類語言最小的表義符號(hào),例如A、B等。給定一系列字符,對(duì)每個(gè)字符賦予一個(gè)數(shù)值,用數(shù)值來代表對(duì)應(yīng)的字符,這個(gè)數(shù)值就是字符的編碼(Character Encoding)。 給定一系列字符并賦予對(duì)應(yīng)的編碼后,所有這些“字符和編碼對(duì)”組
29、成的集合就是字符集(Character Set)。,2.2.1 字符集及字符序概念,2.2.1 字符集及字符序概念,字符序(Collation)是指在同一字符集內(nèi)字符之間的比較規(guī)則。一個(gè)字符集包含多種字符序,每個(gè)字符序唯一對(duì)應(yīng)一種字符集。 MySQL字符序命名規(guī)則是:以字符序?qū)?yīng)的字符集名稱開頭,以國家名居中(或以general居中),以ci、cs或bin結(jié)尾。 ci表示大小寫不敏感,cs表示大小寫敏感,bin表示按二進(jìn)制編碼值比較。,2.2.1 字符集及字符序概念,使用MySQL命令show character set; 即可查看當(dāng)前MySQL服務(wù)實(shí)例支持的字符集、字符集默認(rèn)的字符序以及字符
30、集占用的最大字節(jié)長度等信息 latin1支持西歐字符、希臘字符等 gbk支持中文簡體字符 big5支持中文繁體字符 utf8幾乎支持世界所有國家的字符。,2.2.2 MySQL字符集及字符序,使用MySQL命令 show variables like character%; 即可查看當(dāng)前MySQL服務(wù)實(shí)例使用的字符集。,2.2.2 MySQL字符集及字符序,character_set_client:MySQL客戶機(jī)字符集。 character_set_connection:數(shù)據(jù)通信鏈路字符集,當(dāng)MySQL客戶機(jī)向服務(wù)器發(fā)送請求時(shí),請求數(shù)據(jù)以該字符集進(jìn)行編碼。 character_set_dat
31、abase:數(shù)據(jù)庫字符集。 character_set_filesystem:MySQL服務(wù)器文件系統(tǒng)字符集,該值是固定的binary。,2.2.2 MySQL字符集及字符序,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ù)庫名等) 的字符集,默認(rèn)值為utf8。,2.2.2 MySQL字符集及字符序,使用MySQL命令“show collation;”即可查看當(dāng)前My
32、SQL服務(wù)實(shí)例支持的字符序。,2.2.2 MySQL字符集及字符序,2.2.3 MySQL字符集的轉(zhuǎn)換過程,方法1:修改my.ini配置文件,可修改MySQL默認(rèn)的字符集。 方法2:MySQL提供下列MySQL命令可以“臨時(shí)地”修改MySQL“當(dāng)前會(huì)話的”字符集以及字符序。,2.2.4 MySQL字符集的設(shè)置,set character_set_client = gbk; set character_set_connection = gbk; set character_set_database = gbk; set character_set_results = gbk; set chara
33、cter_set_server = gbk; set collation_connection = gbk_chinese_ci ; set collation_database = gbk_chinese_ci ; set collation_server = gbk_chinese_ci ;,2.2.4 MySQL字符集的設(shè)置,方法3:使用MySQL命令 “set names gbk;”可以“臨時(shí)一次性地”設(shè)置character_set_client、character_set_connection以及character_set_results的字符集為gbk 方法4:連接MySQL服務(wù)器
34、時(shí)指定字符集 mysql -default-character-set=字符集 -h 服務(wù)器IP地址 -u 賬戶名 p密碼,2.2.4 MySQL字符集的設(shè)置,SQL基本的執(zhí)行方法(兩種): . C:mysqlinit.sql source C:mysqlinit.sql,2.2.5 SQL腳本文件,1,2,3,數(shù)據(jù)庫是存儲(chǔ)數(shù)據(jù)庫對(duì)象的容器。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),4,5,選擇當(dāng)前操作的數(shù)據(jù)庫,刪除數(shù)據(jù)庫,2.3 MySQL數(shù)據(jù)庫管理,create database cho
35、ose; 成功創(chuàng)建choose數(shù)據(jù)庫后,數(shù)據(jù)庫根目錄下會(huì)自動(dòng)創(chuàng)建數(shù)據(jù)庫目錄。,2.3.1 創(chuàng)建數(shù)據(jù)庫,使用MySQL命令 show databases; 即可查看MySQL服務(wù)實(shí)例上所有的數(shù)據(jù)庫,2.3.2 查看數(shù)據(jù)庫,使用MySQL命令 show create database choose; 可以查看choose數(shù)據(jù)庫的相關(guān)信息(例如MySQL版本ID號(hào)、默認(rèn)字符集等信息)。,2.3.3 顯示數(shù)據(jù)庫結(jié)構(gòu),執(zhí)行“use choose;”命令后,后續(xù)的MySQL命令以及SQL語句將自動(dòng)操作choose數(shù)據(jù)庫中所有數(shù)據(jù)庫對(duì)象。,2.3.4 選擇當(dāng)前操作的數(shù)據(jù)庫,刪除student數(shù)據(jù)庫,使用SQ
36、L語句 drop database student;,2.3.5 刪除數(shù)據(jù)庫,a,107,1,2,3,表是數(shù)據(jù)庫中最為重要的數(shù)據(jù)庫對(duì)象,設(shè)置默認(rèn)的存儲(chǔ)引擎,MyISAM和InnoDB存儲(chǔ)引擎,創(chuàng)建數(shù)據(jù)庫表,4,5,顯示表結(jié)構(gòu),表記錄的管理,2.4 MySQL表管理,a,108,6,7,表是數(shù)據(jù)庫中最為重要的數(shù)據(jù)庫對(duì)象,刪除表,InnoDB表空間,2.4 MySQL表管理,MySQL提供了插件式(Pluggable)的存儲(chǔ)引擎,存儲(chǔ)引擎是基于表的,同一個(gè)數(shù)據(jù)庫,不同的表,存儲(chǔ)引擎可以不同。甚至同一個(gè)數(shù)據(jù)庫表,在不同的場合可以應(yīng)用不同的存儲(chǔ)引擎。,2.4.1 MyISAM和InnoDB存儲(chǔ)引擎,使
37、用MySQL命令“show engines;”,即可查看MySQL服務(wù)實(shí)例支持的存儲(chǔ)引擎。,2.4.1 MyISAM和InnoDB存儲(chǔ)引擎,1InnoDB存儲(chǔ)引擎的特點(diǎn) 支持外鍵(Foreign Key) 支持事務(wù)(Transaction):如果某張表主要提供OLTP支持,需要執(zhí)行大量的增、刪、改操作(insert、delete、update語句),出于事務(wù)安全方面的考慮,InnoDB存儲(chǔ)引擎是更好的選擇。 最新版本的MySQL已經(jīng)開始支持全文檢索。,2.4.1 MyISAM和InnoDB存儲(chǔ)引擎,2MyISAM存儲(chǔ)引擎的特點(diǎn) MyISAM具有檢查和修復(fù)表的大多數(shù)工具。 MyISAM表可以被壓
38、縮 MyISAM表最早支持全文索引 但MyISAM表不支持事務(wù) 但MyISAM表不支持外鍵(Foreign Key)。 如果需要執(zhí)行大量的select語句,出于性能方面的考慮,MyISAM存儲(chǔ)引擎是更好的選擇。,2.4.1 MyISAM和InnoDB存儲(chǔ)引擎,MySQL5.6默認(rèn)的默認(rèn)的存儲(chǔ)引擎是InnoDB。 使用MySQL命令 set default_storage_engine=MyISAM; 可以“臨時(shí)地”將MySQL“當(dāng)前會(huì)話的”存儲(chǔ)引擎設(shè)置為MyISAM,使用MySQL命令“show engines;”可以查看當(dāng)前MySQL服務(wù)實(shí)例默認(rèn)的存儲(chǔ)引擎。,2.4.2 設(shè)置默認(rèn)的存儲(chǔ)引擎,
39、使用SQL語句“create table表名”即可創(chuàng)建一個(gè)數(shù)據(jù)庫表。例如: use choose; set default_storage_engine=InnoDB; create table my_table( today datetime, name char(20) );,2.4.3 創(chuàng)建數(shù)據(jù)庫表,成功創(chuàng)建InnoDB存儲(chǔ)引擎的my_table表后,MySQL服務(wù)實(shí)例會(huì)在數(shù)據(jù)庫目錄choose中自動(dòng)創(chuàng)建一個(gè)名字為表名、后綴名為frm的文件。my_table.frm。,2.4.3 創(chuàng)建數(shù)據(jù)庫表,將my_table表的存儲(chǔ)引擎修改為MyISAM。 use choose; alter tab
40、le my_table engine=MyISAM;,2.4.3 創(chuàng)建數(shù)據(jù)庫表,使用MySQL命令“des table_name;”即可查看表名為table_name的表結(jié)構(gòu)。,2.4.4 顯示表結(jié)構(gòu),使用MySQL命令“show create table table_name;”,查看名為table_name表的詳細(xì)信息。,2.4.4 顯示表結(jié)構(gòu),use choose; insert into my_table values(now(),a); insert into my_table values(now(),a); insert into my_table values(now(),NU
41、LL); insert into my_table values(now(),); select * from my_table;,2.4.5 表記錄的管理,任務(wù)布置1:完成本書場景描述1 :MyISAM表記錄的管理的任務(wù)要求。 任務(wù)布置2:完成本書場景描述2:InnoDB表記錄的管理的任務(wù)要求。,2.4.5 表記錄的管理,1.共享表空間:MySQL服務(wù)實(shí)例承載的所有數(shù)據(jù)庫的所有InnoDB表的數(shù)據(jù)信息、索引信息、各種元數(shù)據(jù)信息以及事務(wù)的回滾(UNDO)信息,全部存放在共享表空間文件中。 默認(rèn)情況下該文件位于數(shù)據(jù)庫根目錄下,文件名是ibdata1,且文件的初始大小為10M??梢允褂肕ySQL命
42、令“show variables like innodb_data_file_path;”查看該文件的的屬性。,2.4.6 InnoDB表空間,2.4.6 InnoDB表空間,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.6 InnoDB表空間,獨(dú)享表空間的設(shè)置,2.4.6 InnoDB表空間,use choose; alter table my_table engine=InnoDB
43、; create table second_table( today datetime, name char(20) );,2.4.6 InnoDB表空間,2.4.6 InnoDB表空間,任務(wù)布置3:完成本書場景描述3的任務(wù)要求。,2.4.6 InnoDB表空間,使用SQL語句 drop table table_name; 即可刪除名為table_name的表。 刪除表后,MySQL服務(wù)實(shí)例會(huì)自動(dòng)刪除該表結(jié)構(gòu)定義文件(例如second_table.frm文件),以及數(shù)據(jù)、索引信息。該命令慎用!,2.4.7 刪除表,a,129,1,2,3,MySQL數(shù)據(jù)庫中,變量分為系統(tǒng)變量(以開頭)以及用戶自
44、定義變量(以開頭)。,查看系統(tǒng)變量的值,全局系統(tǒng)變量與會(huì)話系統(tǒng)變量,設(shè)置系統(tǒng)變量的值,2.5 系統(tǒng)變量,每一個(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)變量,由于各會(huì)話在會(huì)話期間所做的操作不盡相同,為了標(biāo)記各個(gè)會(huì)話,會(huì)話系統(tǒng)變量又新增了12個(gè)變量。,2.5.1 全局系統(tǒng)變量與會(huì)話系統(tǒng)變量,2.5.1 全局系統(tǒng)變量與會(huì)話系統(tǒng)變量,使用“show global variables;”命令即可查看MySQ
45、L服務(wù)器內(nèi)存中所有的全局系統(tǒng)變量信息(有393項(xiàng)之多)。 使用“show session variables;”命令即可查看與當(dāng)前會(huì)話相關(guān)的所有會(huì)話系統(tǒng)變量以及所有的全局系統(tǒng)變量(有405項(xiàng)之多),此處session關(guān)鍵字可以省略。,2.5.2 查看系統(tǒng)變量的值,MySQL中有一些系統(tǒng)變量僅僅是全局系統(tǒng)變量,例如 innodb_data_file_path。 show global variables like innodb_data_file_path; show session variables like innodb_data_file_path; show variables lik
46、e innodb_data_file_path;,2.5.2 查看系統(tǒng)變量的值,MySQL中有一些系統(tǒng)變量僅僅是會(huì)話系統(tǒng)變量,例如MySQL連接ID會(huì)話系統(tǒng)變量pseudo_thread_id。 show session variables like pseudo_thread_id; show variables like pseudo_thread_id;,2.5.2 查看系統(tǒng)變量的值,MySQL中有一些系統(tǒng)變量既是全局系統(tǒng)變量,又是會(huì)話系統(tǒng)變量,例如系統(tǒng)變量character_set_client 既是全局系統(tǒng)變量,又是會(huì)話系統(tǒng)變量。,2.5.2 查看系統(tǒng)變量的值,此時(shí)查看會(huì)話系統(tǒng)變量的
47、方法: show session variables like character_set_client; show variables like character_set_client; 此時(shí)查看全局系統(tǒng)變量的方法: show global variables like character_set_client;,2.5.2 查看系統(tǒng)變量的值,作為MySQL編碼規(guī)范,MySQL中的系統(tǒng)變量以兩個(gè)“”開頭。 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)變量的值,任務(wù)布
48、置4:完成本書場景描述4的任務(wù)要求。,2.5.2 查看系統(tǒng)變量的值,方法一:修改MySQL源代碼,然后對(duì)MySQL源代碼重新編譯(該方法適用于MySQL高級(jí)用戶,這里不作闡述)。 方法二:最為簡單的方法是通過修改MySQL配置文件,繼而修改MySQL系統(tǒng)變量的值(fai方法需要重啟MySQL服務(wù))。 方法三:在MySQL服務(wù)運(yùn)行期間,使用“set”命令重新設(shè)置系統(tǒng)變量的值。,2.5.2 查看系統(tǒng)變量的值,設(shè)置全局系統(tǒng)變量的值的方法: set global.innodb_file_per_table = default; set global.innodb_file_per_table = ON
49、; set global innodb_file_per_table = ON;,2.5.2 查看系統(tǒng)變量的值,設(shè)置會(huì)話系統(tǒng)變量的值的方法: set session.pseudo_thread_id = 5; set session pseudo_thread_id = 5; set pseudo_thread_id = 5; set pseudo_thread_id = 5;,2.5.2 查看系統(tǒng)變量的值,MySQL中還有一些特殊的全局系統(tǒng)變量(例如log_bin、tmpdir、version、datadir),在MySQL服務(wù)實(shí)例運(yùn)行期間它們的值不能動(dòng)態(tài)修改,不能使用“set”命令進(jìn)行重新
50、設(shè)置,這種變量稱為靜態(tài)變量。 數(shù)據(jù)庫管理員可以使用方法一或者方法二對(duì)靜態(tài)變量的值重新設(shè)置。,2.5.2 查看系統(tǒng)變量的值,a,144,步驟1:準(zhǔn)備工作 方法一:停止MySQL服務(wù) 方法二:使用MySQL命令“flush tables with read lock;”將服務(wù)器內(nèi)存中的數(shù)據(jù)“刷新”到數(shù)據(jù)庫文件中,同時(shí)鎖定所有表,以保證備份期間不會(huì)有新的數(shù)據(jù)寫入。,2.6 MySQL數(shù)據(jù)庫備份和恢復(fù),a,145,步驟2:備份文件的選取 如果數(shù)據(jù)庫中全部是MyISAM存儲(chǔ)引擎的表,最為簡單的數(shù)據(jù)庫備份方法就是直接“備份”整個(gè)數(shù)據(jù)庫目錄。 如果某個(gè)數(shù)據(jù)庫中還存在InnoDB存儲(chǔ)引擎的表,此時(shí)不僅需要“備
51、份”整個(gè)數(shù)據(jù)庫目錄,還需要備份ibdata1表空間文件以及重做日志文件ib_logfile0與ib_logfile1。,2.6 MySQL數(shù)據(jù)庫備份和恢復(fù),a,146,步驟2:備份文件的選取 數(shù)據(jù)庫備份時(shí),建議將MySQL配置文件(例如my.ini配置文件)一并進(jìn)行備份。,2.6 MySQL數(shù)據(jù)庫備份和恢復(fù),a,147,步驟3:數(shù)據(jù)庫恢復(fù) 首先停止MySQL服務(wù);然后將整個(gè)數(shù)據(jù)庫目錄、MySQL配置文件(例如my.ini配置文件)、ibdata1共享表空間文件以及重做日志文件ib_logfile0與ib_logfile1復(fù)制到新MySQL服務(wù)器對(duì)應(yīng)的路徑,即可恢復(fù)數(shù)據(jù)庫中的數(shù)據(jù)。,2.6 My
52、SQL數(shù)據(jù)庫備份和恢復(fù),a,148,Thanks,a,149,a,150,孔祥盛,MySQL數(shù)據(jù)庫基礎(chǔ)與實(shí)例教程 之 MySQL表結(jié)構(gòu)的管理,a,151,1,2,3,本章詳細(xì)講解“選課系統(tǒng)”數(shù)據(jù)庫各個(gè)表的實(shí)施過程,通過本章的學(xué)習(xí),讀者可以掌握表結(jié)構(gòu)管理的相關(guān)知識(shí)。,4,創(chuàng)建表,MySQL數(shù)據(jù)類型,修改表結(jié)構(gòu),刪除表,5,索引,內(nèi)容一覽,a,152,1,2,3,MySQL提供的數(shù)據(jù)類型包括數(shù)值類型(整數(shù)類型和小數(shù)類型)、字符串類型、日期類型、復(fù)合類型(復(fù)合類型包括enum類型和set類型)以及二進(jìn)制類型 。,MySQL小數(shù)類型,MySQL整數(shù)類型,MySQL字符串類型,4,5,MySQL日期類型
53、,MySQL復(fù)合類型,3.1 MySQL數(shù)據(jù)類型,a,153,6,7,為字段選擇合適的數(shù)據(jù)類型,MySQL二進(jìn)制類型,MySQL提供的數(shù)據(jù)類型包括數(shù)值類型(整數(shù)類型和小數(shù)類型)、字符串類型、日期類型、復(fù)合類型(復(fù)合類型包括enum類型和set類型)以及二進(jìn)制類型 。,3.1 MySQL數(shù)據(jù)類型,3.1.1 MySQL整數(shù)類型,整數(shù)類型的數(shù),默認(rèn)情況下既可以表示正整數(shù)又可以表示負(fù)整數(shù)(此時(shí)稱為有符號(hào)數(shù))。如果只希望表示零和正整數(shù),可以使用無符號(hào)關(guān)鍵字“unsigned”對(duì)整數(shù)類型進(jìn)行修飾(此時(shí)稱為無符號(hào)整數(shù))。 例如:score tinyint unsigned,3.1.1 MySQL整數(shù)類型,
54、3.1.1 MySQL整數(shù)類型,3.1.2 MySQL小數(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.99999.99 decimal (5,0)表示: -9999999999的整數(shù)。,3.1.2 MySQL小數(shù)類型,3.1.2 MySQL小數(shù)類型,字符串類型的數(shù)據(jù)外觀上使用單引號(hào)括起來,例如學(xué)生姓名張三、課程名java程序設(shè)計(jì)等。,3.1.3 MySQL字符串,char()與
55、varchar(): 例如對(duì)于簡體中文字符集gbk的字符串而言,varchar(255)表示可以存儲(chǔ)255個(gè)漢字,而每個(gè)漢字占用兩個(gè)字節(jié)的存儲(chǔ)空間。假如這個(gè)字符串沒有那么多漢字,例如僅僅包含一個(gè)中字,那么varchar(255)僅僅占用1個(gè)字符(兩個(gè)字節(jié))的儲(chǔ)存空間;而char(255)則必須占用255個(gè)字符長度的存儲(chǔ)空間,哪怕里面只存儲(chǔ)一個(gè)漢字。,3.1.3 MySQL字符串類型,date表示日期,默認(rèn)格式為YYYY-MM-DD; time表示時(shí)間,格式為HH:ii:ss; year表示年份; datetime與timestamp是日期和時(shí)間的混合類型,格式為YYYY-MM-DD HH:ii
56、:ss,3.1.4 MySQL日期類型,datetime與timestamp都是日期和時(shí)間的混合類型,區(qū)別在于: 表示的取值范圍不同,datetime的取值范圍遠(yuǎn)遠(yuǎn)大于timestamp的取值范圍。 將NULL插入timestamp字段后,該字段的值實(shí)際上是MySQL服務(wù)器當(dāng)前的日期和時(shí)間。 同一個(gè)timestamp類型的日期或時(shí)間,不同的時(shí)區(qū),顯示結(jié)果不同。,3.1.4 MySQL日期類型,任務(wù)布置1:理解datetime與timestamp之間的區(qū)別。 上機(jī)操作,完成本書場景描述1以及場景描述2的任務(wù)要求,理解datetime與timestamp之間的區(qū)別。 學(xué)會(huì)使用now()函數(shù)。 注意
57、:now()函數(shù)用于獲得MySQL服務(wù)器的當(dāng)前時(shí)間,該時(shí)間與時(shí)區(qū)的設(shè)置密切相關(guān)。,3.1.4 MySQL日期類型,MySQL 支持兩種復(fù)合數(shù)據(jù)類型:enum枚舉類型和set集合類型。 enum類型的字段類似于單選按鈕的功能,一個(gè)enum類型的數(shù)據(jù)最多可以包含65535個(gè)元素。 set 類型的字段類似于復(fù)選框的功能,一個(gè)set類型的數(shù)據(jù)最多可以包含64個(gè)元素。,3.1.5 MySQL復(fù)合類型,任務(wù)布置2:上機(jī)操作,完成本書場景描述3的任務(wù)要求,理解復(fù)合類型的用法。 注意:MySQL模式對(duì)復(fù)合類型數(shù)據(jù)的影響。,3.1.5 MySQL復(fù)合類型,二進(jìn)制類型的字段主要用于存儲(chǔ)由0和1組成的字符串,因此從
58、某種意義上將,二進(jìn)制類型的數(shù)據(jù)是一種特殊格式的字符串。 二進(jìn)制類型與字符串類型的區(qū)別在于:字符串類型的數(shù)據(jù)按字符為單位進(jìn)行存儲(chǔ),因此存在多種字符集、多種字符序;而二進(jìn)制類型的數(shù)據(jù)按字節(jié)為單位進(jìn)行存儲(chǔ),僅存在二進(jìn)制字符集binary。,3.1.6 MySQL二進(jìn)制類型,3.1.6 MySQL二進(jìn)制類型,選擇合適的數(shù)據(jù)類型,不僅可以節(jié)省儲(chǔ)存空間,還可以有效地提升數(shù)據(jù)的計(jì)算性能。 (1)在符合應(yīng)用要求(取值范圍、精度)的前提下,盡量使用“短”數(shù)據(jù)類型 (2)數(shù)據(jù)類型越簡單越好 (3)在MySQL中,應(yīng)該用內(nèi)置的日期和時(shí)間數(shù)據(jù)類型,而不是用字符串來存儲(chǔ)日期和時(shí)間。,3.1.7 選擇合適的數(shù)據(jù)類型,(4)盡量采用精確小數(shù)類型(例如decimal),而不采用浮點(diǎn)數(shù)類型。使用精確小數(shù)類型不僅能夠保證數(shù)據(jù)計(jì)算更為精確,還可以節(jié)省儲(chǔ)存空間,例如百分比使用decimal(4,2)即可。 (5)盡量避免NULL字段,建議將字段指定為NOT NULL約束。,3.1.7 選擇合適的數(shù)據(jù)類型,a,171,1,2,3,create table 表名( 字段名1 數(shù)據(jù)類型 約束條件, 其他約束條件, 其他約束條件 )其他選項(xiàng)(例如存儲(chǔ)引擎、字符集等選項(xiàng)),設(shè)置自增型字段,設(shè)置約束,其他選項(xiàng)的設(shè)置,4,5,創(chuàng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年計(jì)算機(jī)系統(tǒng)服務(wù)項(xiàng)目建議書
- 2025年工程項(xiàng)目管理服務(wù)項(xiàng)目合作計(jì)劃書
- 城鎮(zhèn)污水管網(wǎng)建設(shè)工程投標(biāo)書(范文)
- 鄉(xiāng)鎮(zhèn)流動(dòng)人口工作計(jì)劃
- 2025年碳交易市場項(xiàng)目建議書
- 現(xiàn)代物流管理專業(yè)人才培養(yǎng)方案(三年高職)
- 烏蘇市文職輔警招聘考試真題
- 2025年車載空氣凈化器合作協(xié)議書
- 2021年全國教師資格證考試-中學(xué)筆試科目三《學(xué)科知識(shí)與教學(xué)能力》模擬卷2-高中歷史答案解析
- 跨境電商物流服務(wù)行業(yè)物流金融創(chuàng)新與競爭格局研究報(bào)告
- 《城市供水》課件
- 人工智能與人類智能的區(qū)別
- 護(hù)理質(zhì)量與院感的關(guān)系
- 第四章美容手術(shù)基本知識(shí)及技術(shù)美容外科學(xué)概論講解
- 2.2.2 城鎮(zhèn)化化過程中出現(xiàn)的問題 地理信息技術(shù)在城市管理中的應(yīng)用 必修二
- OBE專業(yè)建設(shè)平臺(tái)項(xiàng)目需求
- 高壓水清洗施安全技術(shù)措施
- 2025年民族文化宮事業(yè)單位招聘5人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年-浙江省安全員《B證》考試題庫及答案
- 第五課+弘揚(yáng)勞動(dòng)精神、勞模精神、工匠精神【中職專用】中職思想政治《職業(yè)道德與法治》高效課堂(高教版2023·基礎(chǔ)模塊)
- 2025新人教版英語七年級(jí)下單詞默寫單
評(píng)論
0/150
提交評(píng)論