關于我們
書單推薦
新書推薦
|
MySQL經(jīng)典實例(第三版)
本書主要面向數(shù)據(jù)庫初學者和專家,以及Web開發(fā)人員,經(jīng)過更新后涵蓋了MySQL*版的強大功能。本書側(cè)重于使用Python、PHP、Java、Perl和Ruby的API進行編程。本書包含兩百多個技巧,你可以從中學習:使用mysql客戶端,編寫基于MySQL的程序。建表、加載數(shù)據(jù),以及從表中選擇數(shù)據(jù)。存儲、獲取和處理字符串。使用日期和時間。排序查詢結(jié)果,生成匯總信息。使用存儲例程、觸發(fā)器和計劃事件。導入、導出、驗證,以及重新格式化數(shù)據(jù)。執(zhí)行事務,統(tǒng)計應用。處理Web輸入,根據(jù)查詢結(jié)果生成Web網(wǎng)頁。使用MySQL進行Web會話管理。安全防范和服務器管理。
隨著MySQL受歡迎程度的提高,關于如何通過MySQL解決具體問題的疑問越來越多,這本書也應運而生。當需要快速的解決方案或技術時,這本手冊里的資源可以為沒有時間從頭解決MySQL問題的程序員或?qū)<姨峁┐罅亢喍糖抑攸c突出的代碼、數(shù)百個完整的示例,以及清晰簡明的解說。本書是一本真正的經(jīng)典之作,也是長期以來*秀的MySQL案例集。書中涵蓋了初學者所需的基礎知識,同時也為高級用戶呈現(xiàn)了MySQL的*發(fā)展。書中豐富的技巧對MySQL專業(yè)人士來說更是難能可貴。Ulf WendelMySQL高級軟件工程師,mysqlnd PHP庫合伙創(chuàng)始人
MySQL數(shù)據(jù)庫管理系統(tǒng)很受歡迎,原因有很多,例如速度快、易于設置、使用和管理,可以在各種版本的UNIX和Windows下運行,基于MySQL的程序可以用多種語言編寫。隨著MySQL流行度的提高,用戶常有如何解決特定問題的疑問,為他們做解答的需求也應運而生。這便是本書的主旨所在:當使用MySQL遇到特定類型的問題需要攻克時,你可以把本書當作一本唾手可得的資料,從中找到快速的解決方案或技術。因為本書是一本手冊,所以理所當然提供了很多案例:你可以直接遵循書中的說明,而無需從頭開發(fā)自己的代碼。本書的編寫采用了問題-解決方案的格式,非常實用,且內(nèi)容易于閱讀和理解。
書中包含很多小節(jié),每個小節(jié)都描寫了如何編寫一個查詢語句、應用一項技術或開發(fā)一段腳本來解決特定范圍內(nèi)的一個問題。本書不會教你開發(fā)成熟復雜的應用程序,但它可以幫助你解決在開發(fā)自己的應用程序時遇到的實際困難。例如,很常見的一個問題是,在編寫查詢語句時,如何處理數(shù)據(jù)值中出現(xiàn)的引號和特殊字符?這其實并不難,但當你不確定應該從何入手時就會感到沮喪。本書演示了解決問題的方法,它揭示了從哪里開始及如何繼續(xù)。這些知識可以反復為你提供幫助,因為在掌握了解決方法后,你可以將該技術應用到任何類型的數(shù)據(jù),例如文本、圖像、聲音或視頻剪輯、新聞文章、壓縮文件或PDF文檔等。另一個常見問題是,我可以同時訪問多個表的數(shù)據(jù)嗎?答案是可以,這很容易做到,因為你只需要了解正確的SQL語法。但是,只有看到本書中的示例,你才能清楚地知道做法。
你可以從本書中學到的其他技巧,包括:
? 如何使用SQL來查詢、排序和匯總行。
? 如何查找表之間的匹配或不匹配。
? 如何執(zhí)行事務。
? 如何計算日期或時間之間的間隔,包括年齡計算。
? 如何識別或移除重復的行。
? 如何正確使用LOAD DATA讀取數(shù)據(jù)文件或查找文件中的非法值。
? 如何通過嚴格模式來防止將錯誤的數(shù)據(jù)輸入到數(shù)據(jù)庫。
? 如何生成序列號并用作唯一的行標識符。
? 如何將視圖當作虛擬表使用。
? 如何編寫存儲過程和函數(shù);如何設置觸發(fā)器,并在插入或更新表的行時激活觸發(fā)器,以便執(zhí)行特定的數(shù)據(jù)處理操作;如何使用事件調(diào)度程序按計劃運行查詢。
? 如何根據(jù)數(shù)據(jù)庫的內(nèi)容生成網(wǎng)頁。
? 如何管理用戶賬號。
? 如何控制服務器日志。
了解如何使用MySQL的其中一個方面是了解如何與服務器通信,即如何使用SQL結(jié)構(gòu)化查詢語言。因此,本書的一個重點就是使用SQL來編寫回答特定類型問題的查詢。學習和使用SQL的一個有用工具是mysql客戶端程序,隨本書一起發(fā)行的MySQL包中有該程序。你可以在交互式的模式下使用該客戶端將SQL語句發(fā)送到服務器并查看結(jié)果。這非常便利,因為它提供了SQL的直接接口。實際上,我們將在第1章專門討論客戶端程序mysql。但是,僅僅能夠執(zhí)行SQL查詢還不夠。通常從數(shù)據(jù)庫提取的信息需要進一步的處理,或者以特定的方式呈現(xiàn)。如果查詢語句間有復雜的相互關系,例如當需要根據(jù)一個查詢的結(jié)果來執(zhí)行其他查詢時,該怎么辦?如果你需要生成一份具有特定格式要求的專業(yè)報告時,該怎么辦?這些問題是本書的另一個重點:如何通過應用程序編程接口(API)編寫與MySQL服務器交互的程序。
在掌握了如何在編程語言的上下文中使用MySQL后,你就可以通過以下方式開發(fā)MySQL的功能:? 可以先將查詢結(jié)果保存起來,然后再重復使用。? 可以充分利用通用編程語言的功能,根據(jù)查詢成功或失敗,以及返回的內(nèi)容做決定,然后再采取相應的動作。? 可以隨心所欲地格式化和顯示查詢結(jié)果。如果你正在編寫命令行腳本,則可以生成純文本。如果是基于Web的腳本,則可以生成HTML表格。如果打算將提取的信息傳輸?shù)狡渌到y(tǒng)的應用程序,則可以生成XML格式的數(shù)據(jù)文件。
SQL與通用編程語言的結(jié)合可以為執(zhí)行查詢和處理結(jié)果提供非常靈活的框架。編程語言提高了執(zhí)行復雜數(shù)據(jù)庫操作的能力。但這并不意味著這本書很復雜。本書的內(nèi)容將盡量保持簡單,同時展示了如何使用易于理解和掌握的技術來構(gòu)建小的功能塊。你可以自由將這些技術應用到自己的程序中,并據(jù)此構(gòu)建任意復雜的應用程序。雖然遺傳密碼的基礎只有四種核酸,但這些基本元素一旦結(jié)合到一起,就可以產(chǎn)生我們周圍不計其數(shù)的生命物種。雖然音階中只有12個音符,但是經(jīng)過技藝高超的作曲家之手,將它們交織在一起就可以產(chǎn)生豐富多彩變化無窮的樂曲。同樣的道理,在你掌握了一系列簡單的案例后,發(fā)揮你的想象力,將它們應用到你想要解決的數(shù)據(jù)庫編程問題上,即使你創(chuàng)建的應用程序不是藝術作品,但也肯定會非常有用,而且還會幫助你和其他人提高工作效率。本書面向的讀者群對于所有想使用MySQL的人來說,本書都很有用,包括想在個人項目(例如博客或維基)中使用數(shù)據(jù)庫的個人,以及專業(yè)數(shù)據(jù)庫和Web開發(fā)人員。本書也適用那些目前沒有使用MySQL但有此意向的人。例如,如果你想學習數(shù)據(jù)庫,但是覺得Oracle等大型數(shù)據(jù)庫系統(tǒng)可能有點令人生畏,那么MySQL就很適合你(也許不應該這么說。因為Oracle在2010年買下了MySQL,現(xiàn)在是本書作者的老板)。
如果你對MySQL很陌生,那么你會在本書中找到許多新穎的使用方法。如果你有使用MySQL的經(jīng)驗,那么你可能很熟悉書里提出的許多問題,但是以前你可能沒有必要去解決它們,而現(xiàn)在有了這本書就可以大大節(jié)省時間。你可以利用書中給出的案例,將它們應用到自己的程序中,從而避免從頭開始編寫代碼。本書的內(nèi)容涵蓋了從入門到高級的各個方面,所以如果某一個案例中描述的技術對你來說太過于簡單,那么可以直接跳過。相反,如果你無法理解某一個案例,那么可以先放在一邊,等稍后閱讀了其他一些案例后再回過頭來看。本書主要內(nèi)容很可能當你閱讀本書的時候,正在嘗試開發(fā)應用程序,但不確定如何實現(xiàn)其中的某些部分。在這種情況下,你已經(jīng)清楚需要解決的問題類型,所以可以查看目錄或索引,找到能夠教你解決問題的相應章節(jié)。
理想情況下,這些章節(jié)的內(nèi)容會完全符合你的想法。如果不是,那么你可以根據(jù)手頭的問題,通過調(diào)整某個案例來解決類似的問題。我會解釋每種技術所涉及的原則,所以你可以按照應用程序的特定需求進行修改。閱讀本書的另一種方法是,你并沒有特別的問題,但是仍然可以通讀本書。這樣做可以讓你更全面地了解MySQL的功能,因此我建議你偶爾翻閱一下本書。如果你能夠了解本書中講解的問題,那么它可以成為一個更高效的工具。
隨著深入后面的章節(jié),有時你會發(fā)現(xiàn)這些章節(jié)使用了前面章節(jié)所介紹的技術。在同一章中亦是如此,后面的小節(jié)經(jīng)常會用到前面小節(jié)介紹過的技術。如果你翻開某一章,發(fā)現(xiàn)某一節(jié)用到的技術你并不熟悉,那么可以查看目錄,找到介紹了該技術的小節(jié)。例如,如果案例中用到了你不熟悉的ORDER BY子句對查詢結(jié)果進行排序,那么你可以回到第7章,閱讀有關各種排序的方法及對它們工作原理的討論。下面是每章的概述,希望能讓你對本書的內(nèi)容有大致的了解。
第1章,客戶端程序mysql。本章介紹了如何使用標準的MySQL命令行客戶端。mysql通常是人們使用MySQL時,第一個會想到的也是最主要的接口,所以了解如何使用它的功能非常重要。通過該應用程序,你能夠以交互的方式執(zhí)行查詢并查看結(jié)果,因此在快速實踐中非常有用。你也可以在批處理模式下利用它來執(zhí)行封裝好的SQL腳本,或?qū)⑺妮敵霭l(fā)送到其他程序。除此之外,本章還討論了其他使用mysql的方法,例如如何增強輸出的可讀性以及生成不同格式的輸出等。
第2章,編寫基于MySQL的程序。本章演示了MySQL編程的基本要素:如何連接到服務器、發(fā)起查詢、獲取結(jié)果,以及處理錯誤。本章還討論了如何在查詢中處理特殊字符和NULL值,如何編寫庫文件來封裝常用操作的代碼,以及收集連接到服務器所需參數(shù)的各種方法。
第3章,從表中查詢數(shù)據(jù)。SELECT語句是從MySQL服務器檢索數(shù)據(jù)的主要手段,本章涵蓋了SELECT語句的幾個方面:指定檢索的列與行,處理NULL值,以及選擇查詢結(jié)果的某一部分。后面的章節(jié)將更詳細地介紹其中的一些主題,本章概述了它們的基本概念。如果你需要了解有關行選擇方面的背景介紹,或者對SQL知識了解不多,那么應該仔細閱讀本章。
第4章,表管理。本章介紹了表的克隆,將結(jié)果復制到其他表、使用臨時表,以及檢查或更改表的存儲引擎。
第5章,字符串。本章介紹了如何處理字符串數(shù)據(jù)。本章涵蓋了字符集和排序規(guī)則、字符串比較、處理區(qū)分大小寫的問題、模式匹配、拆分和組合字符串,以及執(zhí)行全文搜索。
第6章,日期與時間。本章介紹了如何使用時間數(shù)據(jù)。本章描述了MySQL的日期格式以及如何按照其他格式顯示日期值。本章還介紹了如何使用MySQL特殊的TIMESTAMP數(shù)據(jù)類型,如何設置時區(qū),如何在不同時間單位之間進行轉(zhuǎn)換,如何執(zhí)行時間間隔的計算或根據(jù)一個日期生成另一個日期,以及如何執(zhí)行閏年計算。
第7章,查詢結(jié)果的排序。本章描述了如何按所需的順序排列查詢結(jié)果的行。包括指定排序方向、處理NULL值、字符串大小寫的處理,以及按整個日期值或部分日期值進行排序。本章還提供了一些示例,說明如何對特殊類型的值進行排序,例如域名、IP地址和ENUM值。
第8章,匯總數(shù)據(jù)。本章介紹了評估一組數(shù)據(jù)的一般特征的技術,例如數(shù)量或最小值、最大值和平均值。
第9章,存儲例程,觸發(fā)器和計劃事件。本章描述了如何編寫存儲在服務器端的存儲函數(shù)和過程,在修改表時激活的觸發(fā)器,以及按計劃執(zhí)行的事件。
第10章,元數(shù)據(jù)。本章討論了如何獲取有關查詢返回的數(shù)據(jù)的信息,例如結(jié)果中的行數(shù)或列數(shù),或每列的名稱和數(shù)據(jù)類型。本章還介紹了如何查看MySQL中可用的數(shù)據(jù)庫和表,或查看表的結(jié)構(gòu)。
第11章,導入和導出數(shù)據(jù)。本章介紹了如何在MySQL和其他程序之間傳遞信息。包括如何使用LOAD DATA,將文件從一種格式轉(zhuǎn)換為另一種格式,以及確定適合數(shù)據(jù)集的表結(jié)構(gòu)。
第12章,驗證與格式化數(shù)據(jù)。本章描述了如何提取或重新排列數(shù)據(jù)文件中的列,檢查和驗證數(shù)據(jù),以及重新格式化值,例如常常會以各種格式出現(xiàn)的日期。
第13章,序列。本章討論了AUTO_INCREMENT列,MySQL生成序列號的機制。本章介紹了如何生成新的序列值或獲取最新值、如何重新排序列,以及如何使用序列生成計數(shù)器。本章還介紹了如何使用AUTO_INCREMENT值來維護表之間的主從關系,包括需要避免的陷阱。
第14章,連接與子查詢。本章介紹了如何執(zhí)行從多個表中選擇行的操作。本章演示了如何通過比較表查找匹配或不匹配的數(shù)據(jù),生成主從關系的列表和匯總信息,以及枚舉多對多的關系。
第15章,統(tǒng)計技術。本章說明了如何生成描述性統(tǒng)計,頻率分布,回歸和相關性。本章還介紹了如何隨機化一組行或從集合中隨機選擇行。
第16章,處理重復數(shù)據(jù)。討論了如何識別,統(tǒng)計和移除重復的行,以及如何防止重復數(shù)據(jù)的發(fā)生。
第17章,事務處理。本章介紹了如何處理必須作為一個整體一起執(zhí)行的多個SQL語句。本章討論了如何控制MySQL的自動提交模式以及如何提交或回滾事務。
第18章,MySQL的Web應用簡介。本章介紹了如何編寫基于Web的MySQL腳本。Web編程可以根據(jù)數(shù)據(jù)庫的內(nèi)容生成動態(tài)的頁面,或收集信息并存儲到數(shù)據(jù)庫中。本章討論了如何為運行Perl、Ruby、PHP和Python腳本而配置Apache,以及如何為了運行用JSP編寫的Java腳本而配置Tomcat。
第19章,根據(jù)查詢結(jié)果生成網(wǎng)頁的內(nèi)容。本章演示了如何利用查詢結(jié)果生成各種HTML結(jié)構(gòu),例如段落、列表、表格、超鏈接和導航索引。本章還描述了如何將圖像存儲到MySQL中以供以后檢索和顯示,以及如何生成可下載的結(jié)果集。
第20章,利用MySQL處理Web輸入。本章討論了如何通過Web獲取用戶的輸入,并利用輸入來創(chuàng)建新的數(shù)據(jù)庫行或作為執(zhí)行搜索的基礎。本章主要介紹了表單處理,包括如何根據(jù)數(shù)據(jù)庫中包含的信息構(gòu)建表單元素,例如單選按鈕、彈出菜單或復選框。
第21章,基于MySQL的Web會話管理。本章描述了如何在編寫的應用程序內(nèi)使用MySQL作為后備存儲,并在多個請求間傳遞信息。如果你需要分階段收集信息,或者根據(jù)先前的用戶操作做出決策,那么本章的內(nèi)容會非常有幫助行。第22章,服務器管理。本章主要面向的是數(shù)據(jù)庫管理員。本章的內(nèi)容包括服務器配置、插件接口、日志管理、服務器監(jiān)控和備份。第23章,數(shù)據(jù)庫的安全。本章也是有關管理員的知識。本章討論了用戶賬號管理,包括創(chuàng)建賬號、設置密碼和分配權(quán)限。本章還介紹了如何實施密碼策略、查找和修復不安全的賬號,以及作廢密碼和重置過期的密碼。
致謝感謝每一位讀者,謝謝你們閱讀本書。我希望這本書能給你帶來幫助,也希望你能從中找到有用的信息。謝謝我的技術評審員Johannes Schlter、Geert Vanderkelen和Ulf Wendel。他們提出了很多指正和建議,從各個方面提高了本書的創(chuàng)作,我深深地感謝他們的幫助。Andy Oram鼓動我寫了本書的第三版,而且他也承擔了本書的編者,Nicole Shelby將這本書推向了產(chǎn)品,Kim Cofer承擔了本書的校對工作,而Lucie Haskins提供了本書英文原版書的索引。謝謝我的妻子Karen,她在寫作過程中給予我的鼓勵和支持讓我感激不盡。
Paul DuBois是著名的MySQL Reference Manual的主要貢獻者之一,多年來這本手冊一直給予了MySQL管理員和數(shù)據(jù)庫開發(fā)人員很大的支持。他是Oracle公司負責MySQL文檔團隊的成員,還著有《MySQL》等其他著作。
你還可能感興趣
我要評論
|