日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

MySQL數(shù)據(jù)庫(kù)技術(shù)(26)

 Ralf_Jones 2006-07-19
破釜沉舟 http://www.


文章類別:MySQL  發(fā)表日期:2005-09-27      閱讀次數(shù): 310

 

 在本書的這部分中,我們將討論編寫自己的訪問MySQL 數(shù)據(jù)庫(kù)的程序所需要知道的內(nèi)容。MySQL 有一組實(shí)用程序。例如, mysqldump 導(dǎo)出表的上下文和結(jié)構(gòu)定義, mysql import將數(shù)據(jù)文件加載到表中, mysqladmin 實(shí)現(xiàn)管理w操作, mysql 可以使用戶與服務(wù)器交互來(lái)執(zhí)行任意的查詢。每個(gè)標(biāo)準(zhǔn)的MySQL 實(shí)用程序都傾向于小巧,重點(diǎn)放在程序可完成特定的、有限的功能。即使mysql 也是如此,從感覺上說, mysql 比其他實(shí)用程序更靈活,因此可以用它來(lái)執(zhí)行任何數(shù)量的各種查詢,即它就是為允許向服務(wù)器直接發(fā)布SQL 查詢,并可查看查詢結(jié)果這一單一目的而設(shè)計(jì)的。
    MySQL 客戶機(jī)這種有限的特性并不是缺點(diǎn),而是特意設(shè)計(jì)的。程序是具有通用目的的實(shí)用程序;它們并不試圖預(yù)料您所想做的所有可能的需要。MySQL 的開發(fā)者們不贊成編寫大型的、臃腫的程序來(lái)試圖做可能想去做的每件事情(而且這樣做的結(jié)果將使程序中包括大量的
您根本不關(guān)心的事情的代碼)。然而,有時(shí)有些應(yīng)用確實(shí)有常規(guī)客戶機(jī)的能力所無(wú)法處理的需求。為了處理這些情況,MySQL 提供一個(gè)客戶機(jī)編程庫(kù)。這允許您編寫自己的程序,滿足您的應(yīng)用程序可能具有的任何特定需求。通過允許您對(duì)MySQL 服務(wù)器的訪問,客戶機(jī)的開放
程度只受您自己想象力的限制了。
    編寫自己的程序可以獲取如何特殊的能力呢?讓我們比較一下mysql 客戶機(jī)和其沒有附加代碼的接口對(duì)MySQL 服務(wù)器的訪問:
    ■ 可以定制輸入處理。用mysql可以輸入原始的SQL 語(yǔ)句。用自己的程序,可以為用戶提供使用起來(lái)更直觀、更容易的輸入方法。用程序可使用戶不必知道S Q L—甚至不必知道在完成的任務(wù)中數(shù)據(jù)庫(kù)承擔(dān)的角色。
    輸入信息的采集可能是像命令行風(fēng)格的提示和值讀取這樣基本的方式,或者可能是使用屏幕管理程序包(如curses 或S - L a n g)、使用Tcl/Tk 的X 窗口或Web 瀏覽器格式實(shí)現(xiàn)的基于屏幕輸入那樣復(fù)雜的方式。
    對(duì)大多數(shù)人來(lái)說,通過填寫一定的格式來(lái)指定搜索參數(shù)的形式比通過發(fā)布SELECT語(yǔ)句更容易。例如,一位房地產(chǎn)經(jīng)紀(jì)人,要尋找一定價(jià)格范圍、風(fēng)格或位置的房屋,只要將查尋參數(shù)輸入到表格中,就可以最小的代價(jià)得到符合條件的內(nèi)容。輸入新記錄或更新已有記錄也類似地考慮這種應(yīng)用。在數(shù)據(jù)輸入部門的鍵盤操作員應(yīng)該不需要知道像INSERT、REPLACE 或UPDATE 這樣的SQL 語(yǔ)法。
    在最終用戶和MySQL 服務(wù)器之間提出輸入采集層的另一個(gè)原因是可以校驗(yàn)用戶提供的輸入。例如,可以檢查數(shù)據(jù),確認(rèn)它們是符合MySQL 要求的格式,或可以要求填寫特定的區(qū)域。
    ■ 可以定制輸出。mysql 的輸出基本上是無(wú)格式的;可以選擇以制表符為分隔符或以表格形式輸出。如果想要使輸出結(jié)果看起來(lái)比較好,則必須自己對(duì)它進(jìn)行格式化。這些需求可能像打印“Missing”而不是NULL 這樣簡(jiǎn)單,也可能更復(fù)雜??紤]下面的報(bào)告:

    這個(gè)報(bào)告包括幾個(gè)特定的元素:
    ■ 定制標(biāo)題。
    ■ 在State 列中重復(fù)值的抑制以便只在更改時(shí)才將這些值打印出來(lái)。
    ■ 小計(jì)和總計(jì)的計(jì)算。
    ■ 數(shù)字格式,如9 4 3 8 4 . 2 4,打印為美元數(shù)量為$ 9 4 , 3 8 4 . 2 4。對(duì)于一些任務(wù),甚至可能不需要任何輸出。您可能正在對(duì)計(jì)算向后插入到另一個(gè)數(shù)據(jù)庫(kù)表中的結(jié)果進(jìn)行簡(jiǎn)單地檢索信息。除了用戶運(yùn)行這個(gè)查詢以外,甚至可能還想將這個(gè)結(jié)果輸出到其他地方。例如,如果正在提取姓名和電子郵件地址以自動(dòng)地填入為批量電子郵件生成信件格式的過程中,則程序產(chǎn)生輸出。但是該輸出由郵件接受者的信息組成,而沒有運(yùn)行程序人員的信息。
    ■ 可以在S Q L自身施加的約束條件的環(huán)境下工作。SQL 不是一種帶有條件選擇、循環(huán)和子例程的流程控制結(jié)構(gòu)的過程語(yǔ)言。SQL 腳本包括一組從開始到結(jié)束一次一個(gè)的可執(zhí)行語(yǔ)句,具有最低限度的錯(cuò)誤檢查。
    如果在批處理模式中使用mysql 執(zhí)行SQL 查詢的一個(gè)文件,則mysql 在出現(xiàn)第一個(gè)錯(cuò)誤后退出,或者,如果指定--force 選項(xiàng),則不管出現(xiàn)多少錯(cuò)誤,都不加選擇地執(zhí)行所有查詢。程序可以圍繞語(yǔ)句提供流程控制,以便可以有選擇地適應(yīng)查詢的成功或失敗??梢愿鶕?jù)另一個(gè)查詢的成功或失敗來(lái)執(zhí)行一個(gè)查詢,或根據(jù)前一個(gè)查詢的結(jié)果來(lái)決定下一步要做的事情。SQL 具有非常有限的語(yǔ)句間的連續(xù)性,這點(diǎn)也被帶到mysql 中。使用一個(gè)查詢的結(jié)果,并將它們應(yīng)用于另一個(gè)查詢中,或?qū)⒍鄠€(gè)查詢結(jié)果聯(lián)系在一起是困難的。L A S T _ I N S E RT _ID() 可用于獲取由前一個(gè)語(yǔ)句最新生成的A U TO_INCREMENT 值,僅僅是關(guān)于它的。
    更一般的情況是,要想檢索一組記錄,然后使用每一條記錄作為一系列復(fù)雜的進(jìn)一步操作的基礎(chǔ)是困難的。例如,檢索一個(gè)消費(fèi)者列表然后查詢每個(gè)消費(fèi)者的詳細(xì)信用歷史,對(duì)每個(gè)客戶來(lái)說可能要包括若干個(gè)查詢。在某些情況下,可能想開發(fā)票,在發(fā)票頭寫上需要聯(lián)系的客戶信息,然后按次序列出每項(xiàng)條目。mysql 不適合這些類型的任務(wù),因?yàn)榭赡苄枰蕾囉谇皫讉€(gè)查詢結(jié)果的若干查詢,并且這些任務(wù)超出了mysql 的布局設(shè)計(jì)的能力。一般來(lái)說,除了mysql 外,還需要工具來(lái)執(zhí)行包括主-細(xì)目關(guān)系和具有復(fù)雜輸出格式需求的任務(wù)。程序提供將查詢連接在一起的“膠”,并可用一個(gè)查詢的輸出作為另一個(gè)查詢的輸入。
    ■ 可以將MySQL 集成到任何應(yīng)用程序中。許多程序都利用數(shù)據(jù)庫(kù)的能力提供信息。通過發(fā)布一個(gè)快速查詢,應(yīng)用程序可以校驗(yàn)消費(fèi)者號(hào)或檢查一項(xiàng)條目是否在產(chǎn)品清單中。假設(shè)一個(gè)客戶要尋找某些作者的所有書,則Web 應(yīng)用程序可以在數(shù)據(jù)庫(kù)中查找它們,
然后將結(jié)果顯示在該客戶的瀏覽器上。
    通過使用調(diào)用帶有包含SQL 語(yǔ)句的輸入文件的mysql 的外殼腳本( shell script),可以實(shí)現(xiàn)一種初步的“集成”,然后,再使用其他UNIX實(shí)用程序加工這些輸出。但是這可能變得很難看,特別是當(dāng)任務(wù)變得更復(fù)雜時(shí)。當(dāng)應(yīng)用程序不斷增長(zhǎng)成為雜亂的修補(bǔ)工作時(shí),它也可能產(chǎn)生一種“在工作,但覺得有錯(cuò)誤”的感覺。此外,運(yùn)行其他命令的外殼腳本的創(chuàng)建過程的開銷可能超過您的預(yù)想。但它可能更有效率地與MySQL 服務(wù)器直接交互,當(dāng)在應(yīng)用程序執(zhí)行的每個(gè)階段需要它的時(shí)候,都可以精確地提取想要的信息。針對(duì)我們?cè)诘?章“MySQL 和SQL 介紹”中安裝的樣例數(shù)據(jù)庫(kù)s a m p _ d b,我們已經(jīng)列舉了若干需要自己編寫與MySQL 服務(wù)器交互的程序的目標(biāo)。這些目標(biāo)中的一些顯示在下面的列表中:
    ■ 為打印而格式化Historical League 目錄。
    ■ 考慮外觀和聯(lián)機(jī)目錄的尋找。
    ■ 通過電子郵件向成員發(fā)送補(bǔ)充通知。
    ■ 使用Web 瀏覽器很容易地將分?jǐn)?shù)輸入到學(xué)分冊(cè)中。
    在一些細(xì)節(jié)方面,我們將考慮的一個(gè)方面是將MySQL 的能力與Web 環(huán)境結(jié)合起來(lái)。MySQL 不直接提供對(duì)Web 應(yīng)用程序的支持,但通過組合帶有適當(dāng)?shù)墓ぞ叩腗 y S Q L,通過We b可以很容易地訪問數(shù)據(jù)庫(kù)。使用Web 服務(wù)器可以指定查詢,向客戶的瀏覽器報(bào)告結(jié)果。將MySQL 和Web 結(jié)合可能有兩個(gè)想法:
    ■ 主要的興趣在于數(shù)據(jù)庫(kù),只是想使用Web 作為工具來(lái)獲取對(duì)數(shù)據(jù)更容易的訪問。在這樣的想法下,數(shù)據(jù)庫(kù)的位置是清楚且明顯的,因?yàn)樗桥d趣的焦點(diǎn)。例如,可以編寫Web 頁(yè)來(lái)允許查看數(shù)據(jù)庫(kù)所包含的表、表的結(jié)構(gòu),及表的內(nèi)容。您打算使用Web 服務(wù)器來(lái)提高對(duì)MySQL 的訪問能力。這可能也是MySQL 管理者的觀點(diǎn)。
    ■ 主要的興趣可能是Web 站點(diǎn),為了使站點(diǎn)的內(nèi)容對(duì)訪問者更有價(jià)值,您可能想使用MySQL 作為一個(gè)工具。例如,如果為站點(diǎn)的訪問者運(yùn)行信息板或討論清單,則可以使用MySQL 保留信息的軌跡。在這種情況下,數(shù)據(jù)庫(kù)的角色更微妙,訪問者甚至可以不關(guān)心您必須提供給他在服務(wù)器中執(zhí)行的部分。您打算使用MySQL 提高Web 服務(wù)器的能力。這可能也是Web 站點(diǎn)開發(fā)者的一個(gè)觀點(diǎn)。
    這些想法并不矛盾。例如,在Historical League 情況下,我們想通過允許聯(lián)機(jī)輸入來(lái)作為成員獲取訪問成員目錄內(nèi)容的一種方法而使用We b。提供對(duì)數(shù)據(jù)庫(kù)的訪問是Web 的一個(gè)用法。同時(shí),League 的Web 站點(diǎn)在某些方面有些不完全,所以向站點(diǎn)增加目錄內(nèi)容,以便為成員提高站點(diǎn)的價(jià)值。增強(qiáng)站點(diǎn)所提供的服務(wù)是數(shù)據(jù)庫(kù)的一種用法。
    無(wú)論您如何看待MySQL 與Web 的結(jié)合,實(shí)現(xiàn)方法都是類似的,即將前臺(tái)的Web 站點(diǎn)與后臺(tái)的MySQL 連接,使用Web 服務(wù)器作為媒介。Web 服務(wù)器將查詢從用戶發(fā)送到M y S Q L服務(wù)器,檢索查詢結(jié)果,然后將它們傳送給客戶,在瀏覽器上顯示。
    當(dāng)然,不一定要聯(lián)機(jī)處理數(shù)據(jù),但這樣做往往有好處,特別是與經(jīng)過標(biāo)準(zhǔn)的MySQL 客戶機(jī)程序訪問數(shù)據(jù)做比較時(shí):
    ■ 通過Web 訪問數(shù)據(jù),人們可以使用他們喜歡的瀏覽器,在他們喜歡的平臺(tái)上運(yùn)行。他們不限制MySQL 客戶機(jī)程序所運(yùn)行的系統(tǒng)。Web 瀏覽器更是這樣,無(wú)論MySQL 客戶機(jī)分布如何廣泛。
    ■ Web 界面的使用比獨(dú)立命令行的MySQL 客戶機(jī)程序的使用更簡(jiǎn)單。
    ■ Web 界面可以根據(jù)特殊應(yīng)用程序的要求來(lái)定制。而M y S Q L客戶機(jī)程序是用固定接口來(lái)完成基本功能的工具。
    ■ 動(dòng)態(tài)Web 頁(yè)面擴(kuò)充了MySQL 的能力,它可以做到用MySQL 客戶機(jī)很難做到或根本不可能做到的事情。例如,僅用MySQL 客戶機(jī)程序不可能真正地使一體化購(gòu)買車輛的應(yīng)用程序組合成整體。
    任何編程語(yǔ)言都可用來(lái)編寫基于Web 的應(yīng)用程序,但是,有些語(yǔ)言比其他語(yǔ)言更適合一些。請(qǐng)參閱5 . 2節(jié)“選擇A P I”,我們將看到這點(diǎn)。


破釜沉舟 http://www.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多