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