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