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

下載本文檔

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

文檔簡介

1、,孔祥盛,MySQL數(shù)據(jù)庫基礎(chǔ)與實(shí)例教程 之 資源說明,1,2,3,4,本書的特點(diǎn),說在前面的話,本書的提供的資源,淺談學(xué)習(xí)方法,5,解決問題方法,6,小結(jié),內(nèi) 容 一 覽,教師教學(xué)好比導(dǎo)演拍攝一部電影,不僅需要演員(學(xué)生)的配合,還需要挑選好的劇本(書籍)。 好的劇本可以讓導(dǎo)演(教師)、所有演員(學(xué)生)更順利地融入劇情,不僅可以節(jié)省導(dǎo)演(教師)的精力,縮短拍攝周期,節(jié)省拍攝成本,還可以讓所有演員(學(xué)生)真正地成為“劇情”中的主角。,1. 說在前面的話,本書使用量身定制的案例全面講解MySQL基礎(chǔ)知識以及MySQL5.6新特性,InnoDB全文檢索、觸發(fā)器、存儲過程、函數(shù)、事務(wù)、鎖等概念,全部

2、融入該案例。 本書盡量將抽象問題形象化、圖形化,復(fù)雜問題簡單化。即便讀者沒有任何數(shù)據(jù)庫基礎(chǔ),也絲毫不會影響數(shù)據(jù)庫知識的學(xué)習(xí)。,2. 本書的特點(diǎn),曾經(jīng)看到有一種極端的說法:中國不缺好的導(dǎo)演、好的演員,而是缺少好的劇本,對于學(xué)習(xí)亦是如此。 筆者一直認(rèn)為:中國不缺乏好的導(dǎo)演(教師),也不缺乏好的演員(學(xué)生),缺乏的是能夠讓導(dǎo)演(教師)和演員(學(xué)生)快速地融入劇情的劇本(教材)。,1. 說在前面的話,對于學(xué)習(xí),亦是如此。學(xué)習(xí)數(shù)據(jù)庫,尤其是學(xué)習(xí)MySQL ,筆者試圖編寫這樣一部“劇本”:讓教師、學(xué)生快速地融入“劇情”,并且變“學(xué)生被動(dòng)學(xué)習(xí)”為“學(xué)生主動(dòng)學(xué)習(xí)”。 筆者相信:MySQL數(shù)據(jù)庫基礎(chǔ)與實(shí)例教程就

3、是一本能夠滿足導(dǎo)演(教師)、演員(學(xué)生)拍攝要求(教學(xué)要求)的劇本(教材)。,1. 說在前面的話,本書選擇的案例易于理解、開發(fā),非常適合教學(xué)。 本書使用該案例,通過10個(gè)章節(jié)的內(nèi)容,貫穿MySQL所有知識點(diǎn),內(nèi)容編排一氣呵成,章節(jié)之間循序漸進(jìn),內(nèi)容不沖突、不重復(fù)、不矛盾。,2. 本書的特點(diǎn),為了能讓讀者將所有的時(shí)間、精力放在MySQL知識點(diǎn)的學(xué)習(xí)上,本書使用盡可能少的數(shù)據(jù)庫表講解MySQL的所有知識點(diǎn)。 本書所使用的表不超過10張,經(jīng)常使用的表不超過5張,使用5張表講解MySQL幾乎所有的知識點(diǎn),很大程度上可以減輕教師、學(xué)生的負(fù)擔(dān)。但同時(shí)也為筆者構(gòu)思本書的知識框架帶來不少挑戰(zhàn),也希望讀者理解筆

4、者一片苦心。,2. 本書的特點(diǎn),本書注重軟件工程在數(shù)據(jù)庫開發(fā)過程中的應(yīng)用。數(shù)據(jù)庫初學(xué)者通常存在致命的缺陷:重開發(fā),輕設(shè)計(jì)。開發(fā)出來的數(shù)據(jù)庫往往成了倒立的金字塔,頭重腳輕。 真正的數(shù)據(jù)庫開發(fā),首先強(qiáng)調(diào)的是設(shè)計(jì),其次是開發(fā)。正因?yàn)槿绱?,本書將?shù)據(jù)庫設(shè)計(jì)的內(nèi)容進(jìn)行詳細(xì)地講解,并且在本書第一章進(jìn)行了詳細(xì)講解。,2. 本書的特點(diǎn),撰寫本書時(shí),為了向讀者還原筆者真實(shí)的開發(fā)過程,本書在內(nèi)容組織上使用、保留了一定數(shù)量的截圖顯示執(zhí)行結(jié)果,有些截圖至關(guān)重要,讀者甚至必須從截圖中得到一些結(jié)論。當(dāng)然這些截圖無疑增加了本書的版面,希望讀者諒解。,2. 本書的特點(diǎn),截至目前,本書提供的資源都是免費(fèi)資源其中包括:所有安裝程

5、序、PPT課件、教學(xué)大綱、MySQL源代碼、PHP源代碼。 其它資源(例如教學(xué)計(jì)劃、視頻等)正在開發(fā)中,根據(jù)需要,這些資源也將免費(fèi)向讀者提供。讀者也可以時(shí)刻關(guān)注本書資源更新情況。,3. 本書提供的資源,本書提供的資源可以到人民郵電出版社教學(xué)服務(wù)與資源網(wǎng)下載。 出版社網(wǎng)址: 另外,還可以通過百度網(wǎng)盤下載。 百度網(wǎng)盤網(wǎng)址: ,3. 本書提供的資源,4. 淺談學(xué)習(xí)方法,如果SQL代碼運(yùn)行出錯(cuò),首先試圖在書中找到答案; 如果書中沒有答案,建議通過通過百度知道、谷歌搜索引擎找到問題所在(意在鍛煉學(xué)生的自學(xué)能力、自己解決問題的能力); 如果問題依舊沒有解決,首先考慮與其他同學(xué)協(xié)商解決(意在鍛煉協(xié)同能力),

6、直至請教老師,解決該問題。,5. 解決問題方法,個(gè)人觀點(diǎn)1:因?yàn)檫z忘,學(xué)會自學(xué)比學(xué)會知識更重要,會學(xué)知識比學(xué)會知識更重要。 “學(xué)會知識” 層次較低。即學(xué)會了某個(gè)具體的知識。 “會學(xué)知識”層次較高。意在強(qiáng)調(diào)自學(xué)能力。,5. 解決問題方法,個(gè)人觀點(diǎn)2:學(xué)會如何找到知識比掌握知識細(xì)節(jié)更重要。 我們遇到問題時(shí),我們往往不是第一個(gè)發(fā)現(xiàn)該問題的人!更不是第一個(gè)解決該問題的人! 記?。何覀兺皇堑谝粋€(gè)吃螃蟹的人!要學(xué)會使用搜索引擎解決問題。,5. 解決問題方法,6. 小結(jié),孔祥盛,MySQL數(shù)據(jù)庫基礎(chǔ)與實(shí)例教程 之 數(shù)據(jù)庫設(shè)計(jì)概述,1,2,3,本章拋開MySQL講解關(guān)系數(shù)據(jù)庫設(shè)計(jì)的相關(guān)知識,以“選課系統(tǒng)”

7、為例,講解“選課系統(tǒng)”數(shù)據(jù)庫的設(shè)計(jì)流程。,4,內(nèi)容一覽,數(shù)據(jù)庫設(shè)計(jì)的相關(guān)知識,數(shù)據(jù)庫概述,E-R圖,關(guān)系數(shù)據(jù)庫設(shè)計(jì),1,2,3,簡單地說:數(shù)據(jù)庫(Database或DB)是存儲、管理數(shù)據(jù)的容器; 嚴(yán)格地說:數(shù)據(jù)庫是“按照某種數(shù)據(jù)結(jié)構(gòu)對數(shù)據(jù)進(jìn)行組織、存儲和管理的容器”。 總結(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)系數(shù)據(jù)庫管理系統(tǒng),通過“數(shù)據(jù)庫管理系統(tǒng)”,數(shù)據(jù)庫用戶可以輕松地實(shí)現(xiàn)數(shù)據(jù)庫容器中各種數(shù)據(jù)庫對象的訪問(增、刪、改、查等操作),并可以輕松地完成數(shù)據(jù)庫的維護(hù)工作(備份、恢復(fù)、修復(fù)等操作),數(shù)據(jù)庫用戶無法直接通過操作

8、系統(tǒng)獲取數(shù)據(jù)庫文件中的具體內(nèi)容; 數(shù)據(jù)庫管理系統(tǒng)通過調(diào)用操作系統(tǒng)的進(jìn)程管理、內(nèi)存管理、設(shè)備管理以及文件管理等服務(wù),為數(shù)據(jù)庫用戶提供管理、控制數(shù)據(jù)庫容器中各種數(shù)據(jù)庫對象、數(shù)據(jù)庫文件的接口。,1.1.1 關(guān)系數(shù)據(jù)庫管理系統(tǒng),添加標(biāo)題,添加標(biāo)題,層次模型,面向?qū)ο竽P?網(wǎng)狀模型,關(guān)系模型,數(shù)據(jù)庫管理 系統(tǒng)常用的 數(shù)學(xué)模型,添加標(biāo)題,基于“關(guān)系模型”的數(shù)據(jù)庫管理系統(tǒng)稱為關(guān)系數(shù)據(jù)庫管理系統(tǒng)(簡稱為RDBMS)。隨著關(guān)系數(shù)據(jù)庫管理系統(tǒng)的日臻完善,目前關(guān)系數(shù)據(jù)庫管理系統(tǒng)已占據(jù)主導(dǎo)地位。,1.1.1 關(guān)系數(shù)據(jù)庫管理系統(tǒng),2014年2月數(shù)據(jù)庫流行度排行榜,截至目前,MySQL已經(jīng)成功逆襲!,1.1.1 關(guān)系數(shù)據(jù)

9、庫管理系統(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)系”,實(shí)質(zhì)上是一張二維表。請看下面的課程表。,字段名(列名),第1個(gè)字段(列),第1條記錄,第2條記錄,第3條記錄,第4條記錄,第5條記錄,第3個(gè)字段(列),第2個(gè)字段(列),第4個(gè)字段(列),1.1.2 關(guān)系數(shù)據(jù)庫,作為數(shù)據(jù)庫

10、中最為重要的數(shù)據(jù)庫對象,數(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)語法,幾乎所有的關(guān)系數(shù)據(jù)庫管理系統(tǒng)都支持SQL。,1.1.3 結(jié)構(gòu)化查詢語言SQL,學(xué)習(xí)重點(diǎn),1,2,3,數(shù)據(jù)庫設(shè)計(jì)是一個(gè)“系統(tǒng)工程”,要求數(shù)據(jù)庫開發(fā)人員: 熟悉“商業(yè)領(lǐng)域”的商業(yè)知識。 利用“管理學(xué)”的知識與其他開發(fā)人員進(jìn)行有效溝通

11、。 掌握一些數(shù)據(jù)庫設(shè)計(jì)輔助工具。,數(shù)據(jù)庫設(shè)計(jì)輔助工具,商業(yè)知識和溝通技能,“選課系統(tǒng)”概述,4,5,定義問題域,編碼規(guī)范,1.2 數(shù)據(jù)庫設(shè)計(jì)的相關(guān)知識,數(shù)據(jù)庫技術(shù)解決的是“商業(yè)領(lǐng)域”的“商業(yè)問題”。 數(shù)據(jù)庫開發(fā)人員有必要成為該“商業(yè)領(lǐng)域”的專家,與其他開發(fā)人員(包括最終用戶)一起工作,繼而使用數(shù)據(jù)庫技術(shù)解決該“商業(yè)領(lǐng)域”的“商業(yè)問題” 。,1.2.1 商業(yè)知識和溝通技能,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 stu

12、dio Eclipse NetBeans,單元測試工具 功能測試工具 性能測試 工具,程序流程圖 DFD 時(shí)序圖 狀態(tài)圖,CASE工具 IDE工具 測試工具,數(shù)據(jù)模型,類圖,E-R圖,限于篇幅,在不影響“選課系統(tǒng)”核心功能的基礎(chǔ)上,適當(dāng)?shù)貙υ撓到y(tǒng)進(jìn)行“定制”、“擴(kuò)展”以及“瘦身”。,1.2.3 “選課系統(tǒng)”概述,定義問題域是數(shù)據(jù)庫設(shè)計(jì)過程中重要的活動(dòng),它的目標(biāo)是準(zhǔn)確定義要解決的商業(yè)問題。 “選課系統(tǒng)”亟需解決的“商業(yè)”問題有哪些?,1.2.4 定義問題域,在編程的時(shí)候會考慮代碼的可讀性嗎?你覺得代碼可讀性是需要考慮的問題嗎? 1. 代碼不僅要自己能讀懂,還要?jiǎng)e人也能看懂? 2. 盡量做到可讀,

13、但時(shí)間緊任務(wù)重的時(shí)候就顧不上了? 3. 代碼只要自己能讀懂就可以了? 4. 代碼寫完就完了,不用管以后是否能讀懂? 5. 不知道,沒有想過這個(gè)問題?,1.2.5 編碼規(guī)范,請記?。罕M最大努力把方便留給別人和將來的自己。,建議大家遵循本書羅列的常用編程規(guī)范!,1,2,3,關(guān)系,實(shí)體和屬性,E-R圖的設(shè)計(jì)原則,E-R圖設(shè)計(jì)的質(zhì)量直接決定了關(guān)系數(shù)據(jù)庫設(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圖中,

14、實(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ù)是針對關(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)系,1,2,3,實(shí)體是一個(gè)單獨(dú)的個(gè)體,不能存在于另一個(gè)實(shí)體中,成為另一個(gè)實(shí)體的屬性。,屬性應(yīng)該存在于、且只存在于某一個(gè)地方(實(shí)體或者關(guān)聯(lián))。,同一個(gè)實(shí)體在同一個(gè)E-R

15、圖內(nèi),僅出現(xiàn)一次。,數(shù)據(jù)庫開發(fā)人員通常采用“一事一地”的原則從系統(tǒng)的功能描述中抽象出來E-R圖。,1.3.3 E-R圖的設(shè)計(jì)原則,1為E-R圖中的每個(gè)實(shí)體建立一張表。 2為每張表定義一個(gè)主鍵(如果需要,可以向表添加一個(gè)沒有實(shí)際意義的字段作為該表的主鍵) 3增加外鍵表示一對多關(guān)系。 4建立新表表示多對多關(guān)系。 5為字段選擇合適的數(shù)據(jù)類型。 6定義約束條件(如果需要)。 7評價(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,descrip

16、tion,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)識表中的每行記錄。 主鍵(Primary Key):在所有的關(guān)鍵字中選擇一個(gè)關(guān)鍵字,作為該表的主關(guān)鍵字,簡稱主鍵。,1.4.2 為每張表定義一個(gè)主鍵,主鍵有以下兩個(gè)特征: (1)表的主鍵可以是一個(gè)字段,也可以是多個(gè)字段的組合(這種情況稱為復(fù)合主鍵)。 (2)表中主鍵的值具有唯一性且不能取空值(NULL);當(dāng)表中的主鍵由多個(gè)字段構(gòu)成時(shí),

17、每個(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(teacher_no,teacher_name,teacher_contact) classes(class_no,class_name,department_name),1.4.2 為每張表定義一個(gè)主鍵,外鍵(Foreign Key):如果表A中的一個(gè)字段a對應(yīng)于表B的

18、主鍵b,則字段a稱為表A的外鍵,此時(shí)存儲在表A中字段a的值,要么是NULL,要么是來自于表B主鍵b的值。,1.4.3 增加外鍵表示一對多關(guān)系,情形一:如果實(shí)體間的關(guān)系為一對多關(guān)系,則需要將“一”端實(shí)體的主鍵放到“多”端實(shí)體中,然后作為“多”端實(shí)體的外鍵,通過該外鍵即可表示實(shí)體間的一對多關(guān)系。,1.4.3 增加外鍵表示一對多關(guān)系,讓學(xué)生記住所在班級,遠(yuǎn)比班級“記住”所有學(xué)生容易的多 。,1.4.3 增加外鍵表示一對多關(guān)系,情形二:實(shí)體間的一對一關(guān)系,可以看成一種特殊的一對多關(guān)系:將“一”端實(shí)體的主鍵放到另“一”端的實(shí)體中,并作為另“一”端的實(shí)體的外鍵,然后將外鍵定義為唯一性約束(Unique C

19、onstraint)。,1.4.3 增加外鍵表示一對多關(guān)系,PK,1.4.3 增加外鍵表示一對多關(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 增加外鍵表示一對多關(guān)系,情

20、形三:如果兩個(gè)實(shí)體間的關(guān)系為多對多關(guān)系,則需要添加新表表示該多對多關(guān)系,然后將該關(guān)系涉及到的實(shí)體的“主鍵”分別放入到新表中(作為新表的外鍵),并將關(guān)系自身的屬性放入到新表中作為新表的字段。,1.4.4 建立新表表示多對多關(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,stu

21、dent_name, student_contact,class_no) choose(choose_no,student_no,course_no,score,choose_time),1.4.4 建立新表表示多對多關(guān)系,1.4.4 建立新表表示多對多關(guān)系,1.4.5 為字段選擇合適的數(shù)據(jù)類型,常用的約束條件有6種: 主鍵(Primary Key)約束 外鍵(Foreign Key)約束 唯一性(Unique)約束 默認(rèn)值(Default)約束 非空(Not NULL)約束 檢查(Check)約束。,1.4.6 定義約束(Constraint)條件,設(shè)計(jì)數(shù)據(jù)庫時(shí),有兩個(gè)不爭的事實(shí)。 數(shù)據(jù)庫中

22、冗余的數(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 評價(jià)數(shù)據(jù)庫表設(shè)計(jì)的質(zhì)量,冗余的數(shù)據(jù)需要額外的維護(hù),并且容易導(dǎo)致“數(shù)據(jù)不一致”、“插入異?!币约啊皠h除異常”等問題的發(fā)生。,1.4.8 使用規(guī)范化減少數(shù)據(jù)冗余,場景一:插入異常。 場景二:修改復(fù)雜。 場景三:刪除異常。,1.4.8 使用規(guī)范化減少數(shù)據(jù)冗余,規(guī)范化是通過最小化數(shù)據(jù)冗余來提升數(shù)據(jù)庫設(shè)計(jì)質(zhì)量的過程,規(guī)范化是基于函數(shù)依賴以及一系列范式定義的,最為常用的是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)

23、。,1.4.8 使用規(guī)范化減少數(shù)據(jù)冗余,函數(shù)依賴:一張表內(nèi)兩個(gè)字段值之間的一一對應(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 使

24、用規(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_name, up_limit,description,status,teacher_no, available) 方案二:數(shù)據(jù)庫表無需進(jìn)行任何更改。,1.4.9 避免數(shù)據(jù)經(jīng)常發(fā)生變化,任務(wù)1:描述“選課系統(tǒng)”的問題域。 任務(wù)2:將本書圖1-7中“團(tuán)購網(wǎng)站、顧客以及

25、房源之間的三元關(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ù)布置,Thanks,孔祥盛,MySQL數(shù)據(jù)庫基礎(chǔ)與實(shí)例教程 之 MySQL基礎(chǔ)知識,1,2,3,通過本章的學(xué)習(xí),讀者可以掌握一些常用的MySQL命令,從而對MySQL數(shù)據(jù)庫進(jìn)行一些簡單的管理。 本章知識點(diǎn)較為繁雜,希望保持一份兒耐心。,4,字符集以及字符序設(shè)置,MySQL概述,MySQL數(shù)據(jù)庫管理,MySQL表管理,5,系統(tǒng)變量,內(nèi)容一覽,1,2,3,MySQL由瑞典MySQL AB公司開發(fā)。 2008年1月M

26、ySQL被美國的SUN公司收購。 2009年4月SUN公司又被美國的甲骨文(Oracle)公司收購。,MySQL服務(wù)的安裝,MySQL的特點(diǎn),MySQL服務(wù)的配置,4,5,啟動(dòng)與停止MySQL服務(wù),MySQL配置文件,2.1 MySQL概述,6,7,MySQL由瑞典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ù)庫管

27、理系統(tǒng) 。 性能高效 跨平臺支持 簡單易用 開源 支持多用戶,2.1.1 MySQL特點(diǎn),MySQL的使用流程,2.1.1 MySQL特點(diǎn),MySQL其他概念(請參看本書內(nèi)容): MySQL服務(wù) MySQL服務(wù)實(shí)例 MySQL服務(wù)器 端口號,2.1.1 MySQL特點(diǎn),MySQL服務(wù)的安裝(請參看本書內(nèi)容)。 建議自學(xué),并上機(jī)操作。 注意:本書使用的MySQL為5.6版本??梢缘奖緯付ǖ木W(wǎng)址下載MySQL圖形化安裝包mysql-5.6.5-m8-win32.msi。,2.1.2 MySQL服務(wù)的安裝,MySQL服務(wù)的配置(請參看本書內(nèi)容)。 建議自學(xué),并上機(jī)操作。 配置過程中的其他知識點(diǎn):

28、OLAP與OLTP Enable Strict Mode選項(xiàng) 字符集/字符序 MySQL超級管理員root賬戶 my.ini配置文件中,2.1.3 MySQL服務(wù)的配置,MySQL服務(wù)的啟動(dòng)與停止(請參看本書內(nèi)容)。 建議自學(xué),并上機(jī)操作。,2.1.4 啟動(dòng)與停止MySQL服務(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配置文件,

29、client參數(shù)選項(xiàng)組: 配置了MySQL自帶的MySQL5.6 命令行窗口可以讀取的參數(shù)信息。 常用的參數(shù)是port(默認(rèn)值是3306)。 修改該port值會導(dǎo)致新打開的MySQL5.6 命令行窗口無法連接MySQL服務(wù)器。,2.1.5 MySQL配置文件,mysql參數(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ù)程

30、序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”、“datadir”、“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ù)器

31、內(nèi)存后,新配置文件才會在新的MySQL服務(wù)實(shí)例中生效。 如果“mysqld”參數(shù)選項(xiàng)組的參數(shù)信息出現(xiàn)錯(cuò)誤,將會導(dǎo)致MySQL服務(wù)無法啟動(dòng)。,2.1.5 MySQL配置文件,MySQL客戶機(jī)(本書使用前兩個(gè)): MySQL5.6命令行窗口 CMD命令提示符窗口 WEB瀏覽器(例如phpMyAdmin) 第三方客戶機(jī)程序(例如MySQL-Front、MySQLManager for MySQL等),2.1.6 MySQL客戶機(jī),phpMyAdmin,2.1.6 MySQL客戶機(jī),MySQL-Front,2.1.6 MySQL客戶機(jī),MySQLManager for MySQL,2.1.6 MySQ

32、L客戶機(jī),2.1.6 MySQL客戶機(jī),HeidiSQL,MySQL客戶機(jī)連接MySQL服務(wù)器須提供: 合法的登錄主機(jī):解決“from”的問題。 合法的賬戶名以及密碼:解決“who”的問題。 MySQL服務(wù)器主機(jī)名(或IP地址):解決“to”的問題。 端口號:解決“多卡多待”的問題。 MySQL客戶機(jī)與MySQL服務(wù)器是同一臺主機(jī)時(shí),主機(jī)名可以使用localhost(或者127.0.0.1)。,2.1.7 連接MySQL服務(wù)器,當(dāng)MySQL客戶機(jī)與MySQL服務(wù)器是同一臺主機(jī)時(shí),打開命令提示符窗口,輸入 mysql -h 127.0.0.1 -P 3306 -u root proot 或者 m

33、ysql -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ù)器,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è)置,字符

34、(Character)是人類語言最小的表義符號,例如A、B等。給定一系列字符,對每個(gè)字符賦予一個(gè)數(shù)值,用數(shù)值來代表對應(yīng)的字符,這個(gè)數(shù)值就是字符的編碼(Character Encoding)。 給定一系列字符并賦予對應(yīng)的編碼后,所有這些“字符和編碼對”組成的集合就是字符集(Character Set)。,2.2.1 字符集及字符序概念,2.2.1 字符集及字符序概念,字符序(Collation)是指在同一字符集內(nèi)字符之間的比較規(guī)則。一個(gè)字符集包含多種字符序,每個(gè)字符序唯一對應(yīng)一種字符集。 MySQL字符序命名規(guī)則是:以字符序?qū)?yīng)的字符集名稱開頭,以國家名居中(或以general居中),以ci、c

35、s或bin結(jié)尾。 ci表示大小寫不敏感,cs表示大小寫敏感,bin表示按二進(jìn)制編碼值比較。,2.2.1 字符集及字符序概念,使用MySQL命令show character set; 即可查看當(dāng)前MySQL服務(wù)實(shí)例支持的字符集、字符集默認(rèn)的字符序以及字符集占用的最大字節(jié)長度等信息 latin1支持西歐字符、希臘字符等 gbk支持中文簡體字符 big5支持中文繁體字符 utf8幾乎支持世界所有國家的字符。,2.2.2 MySQL字符集及字符序,使用MySQL命令 show variables like character%; 即可查看當(dāng)前MySQL服務(wù)實(shí)例使用的字符集。,2.2.2 MySQL字符

36、集及字符序,character_set_client:MySQL客戶機(jī)字符集。 character_set_connection:數(shù)據(jù)通信鏈路字符集,當(dāng)MySQL客戶機(jī)向服務(wù)器發(fā)送請求時(shí),請求數(shù)據(jù)以該字符集進(jìn)行編碼。 character_set_database:數(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_se

37、rver:MySQL服務(wù)實(shí)例字符集。 character_set_system:元數(shù)據(jù)(字段名、表名、數(shù)據(jù)庫名等) 的字符集,默認(rèn)值為utf8。,2.2.2 MySQL字符集及字符序,使用MySQL命令“show collation;”即可查看當(dāng)前MySQL服務(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)前會話的”字符集以及字符序。,2.2.4 MySQL字符集的設(shè)置,set character_set_

38、client = gbk; set character_set_connection = gbk; set character_set_database = gbk; set character_set_results = gbk; set character_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:使用M

39、ySQL命令 “set names gbk;”可以“臨時(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.4 MySQL字符集的設(shè)置,SQL基本的執(zhí)行方法(兩種): . C:mysqlinit.sql source C:mysqlinit.sql,2.2.5 SQL腳本文件,1,2,3,數(shù)據(jù)庫是存儲數(shù)據(jù)庫對象的容器。My

40、SQL數(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 choose; 成功創(chuàng)建choose數(shù)據(jù)庫后,數(shù)據(jù)庫根目錄下會自動(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)信息(例如MySQ

41、L版本ID號、默認(rèn)字符集等信息)。,2.3.3 顯示數(shù)據(jù)庫結(jié)構(gòu),執(zhí)行“use choose;”命令后,后續(xù)的MySQL命令以及SQL語句將自動(dòng)操作choose數(shù)據(jù)庫中所有數(shù)據(jù)庫對象。,2.3.4 選擇當(dāng)前操作的數(shù)據(jù)庫,刪除student數(shù)據(jù)庫,使用SQL語句 drop database student;,2.3.5 刪除數(shù)據(jù)庫,1,2,3,表是數(shù)據(jù)庫中最為重要的數(shù)據(jù)庫對象,設(shè)置默認(rèn)的存儲引擎,MyISAM和InnoDB存儲引擎,創(chuàng)建數(shù)據(jù)庫表,4,5,顯示表結(jié)構(gòu),表記錄的管理,2.4 MySQL表管理,6,7,表是數(shù)據(jù)庫中最為重要的數(shù)據(jù)庫對象,刪除表,InnoDB表空間,2.4 MySQL表管理

42、,MySQL提供了插件式(Pluggable)的存儲引擎,存儲引擎是基于表的,同一個(gè)數(shù)據(jù)庫,不同的表,存儲引擎可以不同。甚至同一個(gè)數(shù)據(jù)庫表,在不同的場合可以應(yīng)用不同的存儲引擎。,2.4.1 MyISAM和InnoDB存儲引擎,使用MySQL命令“show engines;”,即可查看MySQL服務(wù)實(shí)例支持的存儲引擎。,2.4.1 MyISAM和InnoDB存儲引擎,1InnoDB存儲引擎的特點(diǎn) 支持外鍵(Foreign Key) 支持事務(wù)(Transaction):如果某張表主要提供OLTP支持,需要執(zhí)行大量的增、刪、改操作(insert、delete、update語句),出于事務(wù)安全方面的考

43、慮,InnoDB存儲引擎是更好的選擇。 最新版本的MySQL已經(jīng)開始支持全文檢索。,2.4.1 MyISAM和InnoDB存儲引擎,2MyISAM存儲引擎的特點(diǎn) MyISAM具有檢查和修復(fù)表的大多數(shù)工具。 MyISAM表可以被壓縮 MyISAM表最早支持全文索引 但MyISAM表不支持事務(wù) 但MyISAM表不支持外鍵(Foreign Key)。 如果需要執(zhí)行大量的select語句,出于性能方面的考慮,MyISAM存儲引擎是更好的選擇。,2.4.1 MyISAM和InnoDB存儲引擎,MySQL5.6默認(rèn)的默認(rèn)的存儲引擎是InnoDB。 使用MySQL命令 set default_storage

44、_engine=MyISAM; 可以“臨時(shí)地”將MySQL“當(dāng)前會話的”存儲引擎設(shè)置為MyISAM,使用MySQL命令“show engines;”可以查看當(dāng)前MySQL服務(wù)實(shí)例默認(rèn)的存儲引擎。,2.4.2 設(shè)置默認(rèn)的存儲引擎,使用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存儲引擎的my_table表后,MySQL服

45、務(wù)實(shí)例會在數(shù)據(jù)庫目錄choose中自動(dòng)創(chuàng)建一個(gè)名字為表名、后綴名為frm的文件。my_table.frm。,2.4.3 創(chuàng)建數(shù)據(jù)庫表,將my_table表的存儲引擎修改為MyISAM。 use choose; alter table 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

46、; insert into my_table values(now(),a); insert into my_table values(now(),a); insert into my_table values(now(),NULL); 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ù)

47、據(jù)庫的所有InnoDB表的數(shù)據(jù)信息、索引信息、各種元數(shù)據(jù)信息以及事務(wù)的回滾(UNDO)信息,全部存放在共享表空間文件中。 默認(rèn)情況下該文件位于數(shù)據(jù)庫根目錄下,文件名是ibdata1,且文件的初始大小為10M??梢允褂肕ySQL命令“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存儲引擎的新表,

48、這些表的數(shù)據(jù)信息、索引信息都將保存到獨(dú)享表空間文件。,2.4.6 InnoDB表空間,獨(dú)享表空間的設(shè)置,2.4.6 InnoDB表空間,use choose; alter table my_table engine=InnoDB; 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的表。 刪除表

49、后,MySQL服務(wù)實(shí)例會自動(dòng)刪除該表結(jié)構(gòu)定義文件(例如second_table.frm文件),以及數(shù)據(jù)、索引信息。該命令慎用!,2.4.7 刪除表,1,2,3,MySQL數(shù)據(jù)庫中,變量分為系統(tǒng)變量(以開頭)以及用戶自定義變量(以開頭)。,查看系統(tǒng)變量的值,全局系統(tǒng)變量與會話系統(tǒng)變量,設(shè)置系統(tǒng)變量的值,2.5 系統(tǒng)變量,每一個(gè)MySQL客戶機(jī)成功連接MySQL服務(wù)器后,都會產(chǎn)生與之對應(yīng)的會話。 會話期間,MySQL服務(wù)實(shí)例會在MySQL服務(wù)器內(nèi)存中生成與該會話對應(yīng)的會話系統(tǒng)變量,這些會話系統(tǒng)變量的初始值是全局系統(tǒng)變量值的拷貝。,2.5.1 全局系統(tǒng)變量與會話系統(tǒng)變量,由于各會話在會話期間所做的操

50、作不盡相同,為了標(biāo)記各個(gè)會話,會話系統(tǒng)變量又新增了12個(gè)變量。,2.5.1 全局系統(tǒng)變量與會話系統(tǒng)變量,2.5.1 全局系統(tǒng)變量與會話系統(tǒng)變量,使用“show global variables;”命令即可查看MySQL服務(wù)器內(nèi)存中所有的全局系統(tǒng)變量信息(有393項(xiàng)之多)。 使用“show session variables;”命令即可查看與當(dāng)前會話相關(guān)的所有會話系統(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

51、 variables like innodb_data_file_path; show session variables like innodb_data_file_path; show variables like innodb_data_file_path;,2.5.2 查看系統(tǒng)變量的值,MySQL中有一些系統(tǒng)變量僅僅是會話系統(tǒng)變量,例如MySQL連接ID會話系統(tǒng)變量pseudo_thread_id。 show session variables like pseudo_thread_id; show variables like pseudo_thread_id;,2.5.2 查看系統(tǒng)

52、變量的值,MySQL中有一些系統(tǒng)變量既是全局系統(tǒng)變量,又是會話系統(tǒng)變量,例如系統(tǒng)變量character_set_client 既是全局系統(tǒng)變量,又是會話系統(tǒng)變量。,2.5.2 查看系統(tǒng)變量的值,此時(shí)查看會話系統(tǒng)變量的方法: 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

53、中的系統(tǒng)變量以兩個(gè)“”開頭。 global僅僅用于標(biāo)記全局系統(tǒng)變量; session僅僅用于標(biāo)記會話系統(tǒng)變量; 首先標(biāo)記會話系統(tǒng)變量,如果會話系統(tǒng)變量不存在,則標(biāo)記全局系統(tǒng)變量。,2.5.2 查看系統(tǒng)變量的值,任務(wù)布置4:完成本書場景描述4的任務(wù)要求。,2.5.2 查看系統(tǒng)變量的值,方法一:修改MySQL源代碼,然后對MySQL源代碼重新編譯(該方法適用于MySQL高級用戶,這里不作闡述)。 方法二:最為簡單的方法是通過修改MySQL配置文件,繼而修改MySQL系統(tǒng)變量的值(fai方法需要重啟MySQL服務(wù))。 方法三:在MySQL服務(wù)運(yùn)行期間,使用“set”命令重新設(shè)置系統(tǒng)變量的值。,2.5

54、.2 查看系統(tǒng)變量的值,設(shè)置全局系統(tǒng)變量的值的方法: set global.innodb_file_per_table = default; set global.innodb_file_per_table = ON; set global innodb_file_per_table = ON;,2.5.2 查看系統(tǒng)變量的值,設(shè)置會話系統(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

55、.5.2 查看系統(tǒng)變量的值,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ù)庫管理員可以使用方法一或者方法二對靜態(tài)變量的值重新設(shè)置。,2.5.2 查看系統(tǒng)變量的值,步驟1:準(zhǔn)備工作 方法一:停止MySQL服務(wù) 方法二:使用MySQL命令“flush tables with read lock;”將服務(wù)器內(nèi)存中的數(shù)據(jù)“刷新”到數(shù)據(jù)庫文件中,同時(shí)鎖定所有表,以保證備份期間不會有新的數(shù)據(jù)寫入。,2.6 MySQL數(shù)據(jù)庫備份和恢復(fù)

56、,步驟2:備份文件的選取 如果數(shù)據(jù)庫中全部是MyISAM存儲引擎的表,最為簡單的數(shù)據(jù)庫備份方法就是直接“備份”整個(gè)數(shù)據(jù)庫目錄。 如果某個(gè)數(shù)據(jù)庫中還存在InnoDB存儲引擎的表,此時(shí)不僅需要“備份”整個(gè)數(shù)據(jù)庫目錄,還需要備份ibdata1表空間文件以及重做日志文件ib_logfile0與ib_logfile1。,2.6 MySQL數(shù)據(jù)庫備份和恢復(fù),步驟2:備份文件的選取 數(shù)據(jù)庫備份時(shí),建議將MySQL配置文件(例如my.ini配置文件)一并進(jìn)行備份。,2.6 MySQL數(shù)據(jù)庫備份和恢復(fù),步驟3:數(shù)據(jù)庫恢復(fù) 首先停止MySQL服務(wù);然后將整個(gè)數(shù)據(jù)庫目錄、MySQL配置文件(例如my.ini配置文件

57、)、ibdata1共享表空間文件以及重做日志文件ib_logfile0與ib_logfile1復(fù)制到新MySQL服務(wù)器對應(yīng)的路徑,即可恢復(fù)數(shù)據(jù)庫中的數(shù)據(jù)。,2.6 MySQL數(shù)據(jù)庫備份和恢復(fù),Thanks,孔祥盛,MySQL數(shù)據(jù)庫基礎(chǔ)與實(shí)例教程 之 MySQL表結(jié)構(gòu)的管理,1,2,3,本章詳細(xì)講解“選課系統(tǒng)”數(shù)據(jù)庫各個(gè)表的實(shí)施過程,通過本章的學(xué)習(xí),讀者可以掌握表結(jié)構(gòu)管理的相關(guān)知識。,4,創(chuàng)建表,MySQL數(shù)據(jù)類型,修改表結(jié)構(gòu),刪除表,5,索引,內(nèi)容一覽,1,2,3,MySQL提供的數(shù)據(jù)類型包括數(shù)值類型(整數(shù)類型和小數(shù)類型)、字符串類型、日期類型、復(fù)合類型(復(fù)合類型包括enum類型和set類型)

58、以及二進(jìn)制類型 。,MySQL小數(shù)類型,MySQL整數(shù)類型,MySQL字符串類型,4,5,MySQL日期類型,MySQL復(fù)合類型,3.1 MySQL數(shù)據(jù)類型,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í)稱為有符號數(shù))。如果只希望表示零和正整數(shù),可以使用無符號關(guān)鍵字“unsigned”對整數(shù)類型進(jìn)行修飾(此時(shí)稱為無符

59、號整數(shù))。 例如:score tinyint unsigned,3.1.1 MySQL整數(shù)類型,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ù)外觀上使用單引號括起來,例如學(xué)生姓名張三、課程名java程序設(shè)計(jì)等。,3.1.3 MySQL字符串,char()與varchar():

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論