本章介紹MySQL關系數據庫管理系統RDBMS)及其所采用的結構化查詢語言SQL)。文中給出了應該掌握的基本術語和概念,並介紹了本書中使用的樣例數據庫,提供了怎樣利 用MySQL創建數據庫並對其進行存取訪問的指導。 在此,如果您對數據庫不熟悉,可能還不能肯定是否需要一個數據庫或是否能夠使用一 個數據庫。或者,如果您對MySQL或SQL 一無所知,需要一種入門性的指導,那麼應該仔 細閱讀本章。對MySQL或對數據庫系統具有一定經驗的讀者可能希望跳過這一章。但是, 不管是否是初學者都應該閱讀1. 2節“一個樣例數據庫”,因為這一節中給出的數據庫是熟悉 數據庫的用途和內容的一個最好的樣例,本書將要反復地用到它。
1.1MySQL的用途
本節介紹MySQL的應用場合。提供MySQL能夠做什麼,以何種方式做的一個大致的概 念。如果您不需要了解數據庫的用途,或許您已經在頭腦中有了要解決什麼問題的想法,只 是希望知道怎樣用MySQL來幫助解決它,那麼可以跳到1.2 節“一個樣例數據庫”。 數據庫系統本質上是一種用來管理信息列表的手段。這些信息可來自不同的地方。例如, 它可以代表研究數據、業務記錄、顧客請求、運動數據統計、銷售報告、個人愛好信息、人 事記錄、問題報告或學生成績等。雖然數據庫系統能夠處理廣泛的信息,但您不會僅僅只是 為用它而用它。如果一項工作很容易,那麼就沒有理由非得僅為了使用數據庫而將數據庫引 入這項工作。雜貨單就是一個很好的例子:開列一個購物清單,購買後在上面畫叉,然後將 它扔了,極不可能為此事使用一個數據庫。即使您有一台便攜式電腦,也只會為雜貨單使用 記事本,而不會啟用數據庫。
數據庫系統的力量只在組織和管理的信息很龐大或很復雜,用手工處理極為繁重時才能 顯示出來。當然,每天處理數百萬個業務的大公司可以使用數據庫。但是,即使只涉及個人 愛好的單一人員維護信息的小公司也可能會需要數據庫。不難想像由於在信息變得難於管理 之前,使用了數據庫而帶來的好處。考慮下列情形:
■ 您的木工店有幾個員工。需要保存員工和工資記錄,以便知道給誰付過工資,什麼時 候付的,並且必須對這些記錄進行匯總以便能向稅務部門報收益表。還需要明了您的 公司雇人所做的工作以及對每項工作所做的安排。
■ 您有一個汽車零部件的庫房網,需要知道哪些庫房中有給定的零件,以便能填寫顧客 訂單。
■ 作為玩具銷售商,要特別關注所進貨物是否流行。需要知道某項物品的當前銷售曲線, 以便能夠估計是否需要增加庫存量對越來越流行的物品),或減少其庫存量從而用 不著存放一大堆銷售不好的東西)。
■ 多年課題研究收集的大量研究數據需要進行分析以便發表。希望對大量的原始數據進 行加工,得出結論性的信息,並為更詳細的統計分析篩選出觀察樣本子集。
■ 您是位受歡迎的演講者,到全國各地的各種集會上進行演講,如在畢業典禮、商務會 議、城市集會和行政大會上進行講演。作了這麼多講演,自己很難記住在什麼地方講 了些什麼,因此一定很願意保存過去講演的記錄,以幫助准備以後的演說。如果您回 到了一個以前曾作過演說的地方,肯定不願意作一個與上一次類似的演講,到過的地 方都有一個記錄能幫助您避免重復。您必定也願意注意講演受歡迎的程度。您在“大 都會狗窩”俱樂部所做的演講“我為什麼喜歡貓”不太成功,那麼下次去那兒時一定 不希望再犯同樣的錯誤。)
■ 您是個教師,需要知道學分和出勤情況。每當您進行測驗或考試時,都要記錄學生們 的學分。將考試成績寫在學分簿上很容易,但以後利用這個學分簿卻很費事。因此, 在學期未確定最終成績時,您寧可不進行學分排序,而且寧可不匯總每個學生的學分。 要統計出每個學生的缺曠課情況也不是一件簡單的事。
■ 您是某機構的秘書,這個機構有一個龐大的會員姓名地址簿。所謂機構可以是任何組 織,如一個專業團體、俱樂部、交響樂團或球迷俱樂部等。)您每年都要根據會員信息 變化,用字處理器進行編輯,然後為每個會員們打印一個地址名錄。 您厭倦了以這種方式維護這個地址簿,因為它限止了您利用它可做的事。用它難於以不 同的方式對各條目排序,不能方便地選擇每個條目的特定部分如給出僅由姓名和電話號碼 組成的清單)。也不能查出某組會員,如那些不久就需要更新其會員資格的人員,如果可能的 話,應該取消為了找到哪些需要發送補充說明的會員而每個月都要查找所有條目的工作。 而且,您一定不願意自己做地址簿的編輯工作,但是團體沒有那麼多的預算,請人會產 生問題。您聽說過“無紙化辦公”,這是一種導致電子化保存記錄的方法,但您沒有看到任何 好處。現在會員記錄是電子化的,但具有諷刺意義的是,除了地址簿的打印外,沒省多少事。 上述情形中有的涉及信息量較大,有的涉及信息量較小。它們的共同特征都是所涉及的 任務可由手工完成,但是用數據庫系統來做會有效得多。 使用如像MySQL這樣的數據庫系統希望看到什麼樣的效果呢?這有賴於您的特定需求, 正如上面的例中所看到的那樣,其效果的差異是相當大的。我們來考慮一種常見的情形,從 而也是一種相當有代表性的數據庫應用。 通常利用數據庫管理系統來處理諸如人們用文件櫃來完成的那樣一類的任務。確實在某 種意義上說,數據庫就像一個大文件櫃,只不過是一個內建的文件編排系統而已。電子化處 理記錄相對手工處理記錄有很多優點。例如,如果您在某種保存有客戶記錄的辦公設施內工 作,那麼MySQL可在某些方面向您提供幫助:
■ 減少記錄編檔時間。不必為尋找增加新記錄的位置而查看櫥櫃的所有抽屜。只要將記 錄放入文件編排系統,並令文件編排系統為您將該記錄放入正確的位置即可。
■ 減少記錄檢索時間。在查找記錄時,不需要自己去尋看每個記錄以找到含有所需信息 的那個記錄。假如您在一個牙科診所中工作。如果想給所有近來未到診斷做過檢查的 病人發催詢單,只需要求文件編排系統查找合適的記錄即可。當然,這樣做會有別於 吩咐別人去做。吩咐別人去做,您只需說,“請確定哪些病人最近6 個月內沒來過。”
而使用數據庫,則需要發出一串奇怪的“咒語”:
如果您從來沒有看到過類似的東西,可能會感到相當嚇人,但是在一兩秒內就能得到結果遠勝於用一個小時來查找,這應該是很有吸引力的。不管怎樣,不用太發愁。這些“咒語” 用不了多久就會不奇怪了。事實上,只要您讀完本章就能完全理解其含義。)
■ 靈活的查找序列。不需要按記錄存放的固定序列去查看它們例如,按姓查找)。可以要求文件編排系統以任意的序列查出記錄;如按姓、保險公司名、最後光臨日期等提出記錄。
■ 靈活的輸出格式。在查找到感興趣的記錄後,不需要手工拷貝其信息。可以讓文件編排系統為您生成一份清單。有時,您可能只需要打印這些信息。有時,您又可能希望在其他程序中使用這些信息。如,在生成誤了看牙預約的病人清單後,可將這些信息送入一個字處理器,打出送給這些病人的通知單。)或者您只對匯總信息感興趣,如對所選出記錄數感興趣。不必自己數它們;文件編排系統可自動生成匯總。
■ 多個用戶同時訪問記錄。對紙上的記錄,如果兩個人想同時查找一個記錄,那麼其中一個人必須等另一個人找完才能查找。MySQL提供多個用戶同時查找的能力,從而兩個人可同時訪問記錄。
■ 記錄的遠程訪問與電子傳輸。紙面記錄需要有該記錄在手邊才能使用,或者需要有人做拷貝再發送給您。而電子記錄可以遠程訪問或進行電子化傳輸。如果您的牙醫專家在多個診所工作,那麼他們可從自己的所在地訪問您的記錄,不需要給他們發快信。如果需要記錄的某個人沒有與您的數據庫軟件相同的軟件,但有電子郵件,那麼您可以選擇所需的記錄,用電子文檔發送。
如果您以前使用過數據庫管理系統,已經了解數據庫的上述諸般好處,可能會想,怎樣才能超越“取代文件櫃”的用途。現在,數據庫系統已經可以用來提供過去不能,直到最近才能夠提供的服務。例如,許多機構以一種與Web 結合的方式使用數據庫,這種方式過去是做不到的。
假如您的公司有一個庫存數據庫,在顧客詢問庫房中是否有某項物品,它的價格是多少時,服務台人員使用這個數據庫,這是數據庫的一種較為傳統的應用。但是,如果您的公司向顧客提供一個可供訪問的Web 站點,那麼可以提供另一項服務,即:提供一個允許顧客確定物品價格和可得性的搜索頁。這給顧客提供了他們所需的信息,提供的方法是讓顧客自動地搜索存放在庫存中的物品信息。顧客可以立即得到信息,不用聽預先錄好的音,或受服務台是否正在工作的限制。對於每個使用您的Web 站點的顧客,所花的費用比服務台工作人員轉接電話的費用還少。或許,該Web 站點已為這個付了費。)
還有比上述更好的利用數據庫的方法。基於Web的庫存查詢請求可以不僅僅為顧客提供信息,而且還可以為您自己提供信息。該查詢請求告訴您顧客在找什麼,而查詢的結果又可以讓您知道能否滿足他們的請求。您可能會在不能滿足顧客需求的方面喪失商機。因此,記錄有關庫存搜索的信息是很有意義的,如記錄:顧客在找什麼、庫存有沒有。然後,可以利用這些信息調整您的庫存,更好地為顧客提供服務。
數據庫的另一新用途是在Web 頁上做標題廣告。我也和您一樣不喜歡它們,但事實是這是一種很流行的MySQL應用,可用MySQL來存儲廣告,然後檢索它們為Web服務器的顯示而用。此外,MySQL還可以用來進行跟蹤,這種跟蹤涉及哪些廣告起了作用、它們被顯示了多少次、哪個站點訪問了它們等等信息。
因此,知道如何利用MySQL最好的辦法是自己試試,為此目的您應該有一個試驗性的數據庫。