Linux應用集成MySQL數據庫訪問技巧
添加時間:2013-1-19 17:43:50
添加:
思海網絡
本文描述了MySQL,一種利用第三方數據庫開發電子貿易和其它復雜、動態網站的有效工具。MySQL 是一種快速、多線程和全功能的 SQL服務器。除了描述MySQL系統的基本體系結構以外,本文還提供了以Tcl和C++編寫的簡單示例,幫助您開發支持數據庫的Web應用。
一個必須存儲或訪問大量信息的應用程序可以從使用第三方數據庫產品中受益匪淺。在對信息的訪問必須在程序的多個實例上進行時更是如此。基于Web的應用(包括電子貿易)就是它的良好例證。
為什么使用獨立數據庫?
Web服務器必須使其處理腳本有辦法來存儲有關供其以后訪問的狀態信息。盡管有可能使用比較原始一些的方法--例如轉儲到文本文件或開發自制的迷你數據庫--但只有成熟的數據庫應用才能提供更為復雜的Web應用所需的所有服務。因為有一些免費獲得的軟件包可用于該目的,所以編寫定制的特定于應用的數據庫引擎并無太大好處。 另外,使用第三方數據庫還使Web開發者不必投入到開發和維護數據庫的任務中。
MySQL數據庫
通過使用腳本語言和編譯型系統語言(例如 C),將數據庫集成到Linux應用就可能相當容易。可免費獲得的MySQL(在GNU Public License下發行)數據庫提供了一系列復雜的SQL功能,并易于集成到應用中。MySQL是快速、多線程的,并支持ANSI和ODBC SQL標準。加上第三方軟件,MySQL就支持用于事務處理應用的事務安全的表。
注:什么是事務處理?
事務是需要以原子方式執行的對數據庫所做的一系列更改。它們要么必須全部執行,要么一個都不執行。 例如,在Web上銷售產品時所有必需的數據庫更改組成一個事務。
數據庫需要同時減去客戶帳戶余額和產品庫存,否則失敗并且一個操作都不執行。
無論服務器出于何種原因發生崩潰都不應該引起事務被部分執行。例如帳單多算、產品沒有交付,或者庫存不實等都有可能是部分完成的事務的結果。
支持事務處理的數據庫可以將一組數據庫代碼封裝在一個事務中,在事務執行期間的任何失敗會讓數據庫回滾到事務開始之前的狀態。
這是通過維護所有數據庫操作的日志,以及其原始狀態表的副本來實現的,在失敗后下一次重新啟動服務器時允許回滾操作。 這種時間和空間上的開銷是事務安全數據庫系統所必需的一種折衷。
單一MySQL服務器控制著一系列數據庫,它們都可以通過服務器以類似方式來訪問。 每個數據庫實際上都是一組任意數量的表,概念與其它SQL數據庫的用戶類似。每個表都由帶類型的數據列組成。 數據可以是整數、實數值、字符串或其它類型,包括原始二進制流。 表中的每一行都是存儲在數據庫中的一個記錄。
MySQL被設計和構造成客戶機/服務器。 服務器mysqld可以在能從因特網訪問到的任何機器上運行(最好與Web服務器在同一臺或最接近的一臺機器上,以確保合理的響應時間)。MySQL客戶機使用請求來與MySQL服務器聯系,修改或查詢服務器所擁有的數據庫。 在支持數據庫的Web應用程序中,數據庫客戶機是Web服務器或由Web服務器產生的CGI腳本。 這些客戶機可以用高級腳本語言或低級系統語言編寫,只要存在這種語言的數據庫API即可。在Linux中,大多數腳本語言是以C 實現的,因為存在MySQL C API,所以要將MySQL支持添加到任何現有的腳本語言或工具應該很容易。絕大部分腳本語言已經完成了這一步。
MySQL API
MySQL API可用于各種語言,包括幾乎所有編寫網站后端所實際使用的語言。 使用這些API,我們可以構建由Web服務器控制的 MySQL客戶機。
API(用于數據庫訪問)以基于連接的模式工作。客戶機必須做的第一件事是打開與MySQL服務器的連接。 這包括適當地使用服務器認識的用戶名和口令來對連接進行身份認證。建立了連接后,服務器選擇要使用的特定數據庫。 確定了初始化后,客戶機應用程序(就我們來說是服務器方CGI腳本)就能自由地與數據庫以兩種方式中的一種進行交互:可以運行常規SQL命令,包括添加和刪除表,以及向它們添加記錄;也可以對返回結果的數據庫運行查詢。 查詢生成一組與查詢匹配的記錄,然后,客戶機可以逐一訪問記錄,直到查看完所有記錄,或者客戶機取消暫掛的記錄檢索。一旦腳本完成了對數據庫的操作后,與服務器的連接就被關閉。
要構建集成數據庫訪問的網站,需要編寫CGI腳本來根據數據庫狀態生成動態結果。Web服務器啟動CGI腳本,然后將適當格式化的HTML輸出到它們的標準輸出流中。Web服務器捕捉到HTML后將它發送回客戶機,如同請求是對靜態HTML頁面進行的那樣。 在生成 HTML 的過程中,腳本可以修改數據庫,也可以查詢并將結果合并到它們的輸出中。
作為簡單解釋上述過程的一個示例,下面的代碼(以C和Tcl編寫)查詢一個包含某公司供銷售的產品清單的數據庫。 這絕沒有使用兩種語言MySQL API的所有特性,但提供了快速、簡易擴展的示例,可以對數據庫內容執行任何SQL命令。 在該例中,腳本顯示了低于特定價格的所有產品。 在實踐中,用戶可能在Web瀏覽器中輸入該價格,然后將它發給服務器。 我們省去了從環境變量中進行讀取來確定 HTML 表單值的細節,因為它與不支持數據庫的 CGI 腳本中執行的情況沒有什么差別。 為清晰起見,我們假設事先設置了特定一些參數(例如要查詢的價格)。
以下代碼是使用免費獲得的Tcl Generic Database Interface以Tcl實現的。這樣一種接口的好處在于Tcl是解釋型的,可以對代碼進行迅速開發和快速修改。
一個必須存儲或訪問大量信息的應用程序可以從使用第三方數據庫產品中受益匪淺。在對信息的訪問必須在程序的多個實例上進行時更是如此。基于Web的應用(包括電子貿易)就是它的良好例證。
為什么使用獨立數據庫?
Web服務器必須使其處理腳本有辦法來存儲有關供其以后訪問的狀態信息。盡管有可能使用比較原始一些的方法--例如轉儲到文本文件或開發自制的迷你數據庫--但只有成熟的數據庫應用才能提供更為復雜的Web應用所需的所有服務。因為有一些免費獲得的軟件包可用于該目的,所以編寫定制的特定于應用的數據庫引擎并無太大好處。 另外,使用第三方數據庫還使Web開發者不必投入到開發和維護數據庫的任務中。
MySQL數據庫
通過使用腳本語言和編譯型系統語言(例如 C),將數據庫集成到Linux應用就可能相當容易。可免費獲得的MySQL(在GNU Public License下發行)數據庫提供了一系列復雜的SQL功能,并易于集成到應用中。MySQL是快速、多線程的,并支持ANSI和ODBC SQL標準。加上第三方軟件,MySQL就支持用于事務處理應用的事務安全的表。
注:什么是事務處理?
事務是需要以原子方式執行的對數據庫所做的一系列更改。它們要么必須全部執行,要么一個都不執行。 例如,在Web上銷售產品時所有必需的數據庫更改組成一個事務。
數據庫需要同時減去客戶帳戶余額和產品庫存,否則失敗并且一個操作都不執行。
無論服務器出于何種原因發生崩潰都不應該引起事務被部分執行。例如帳單多算、產品沒有交付,或者庫存不實等都有可能是部分完成的事務的結果。
支持事務處理的數據庫可以將一組數據庫代碼封裝在一個事務中,在事務執行期間的任何失敗會讓數據庫回滾到事務開始之前的狀態。
這是通過維護所有數據庫操作的日志,以及其原始狀態表的副本來實現的,在失敗后下一次重新啟動服務器時允許回滾操作。 這種時間和空間上的開銷是事務安全數據庫系統所必需的一種折衷。
單一MySQL服務器控制著一系列數據庫,它們都可以通過服務器以類似方式來訪問。 每個數據庫實際上都是一組任意數量的表,概念與其它SQL數據庫的用戶類似。每個表都由帶類型的數據列組成。 數據可以是整數、實數值、字符串或其它類型,包括原始二進制流。 表中的每一行都是存儲在數據庫中的一個記錄。
MySQL被設計和構造成客戶機/服務器。 服務器mysqld可以在能從因特網訪問到的任何機器上運行(最好與Web服務器在同一臺或最接近的一臺機器上,以確保合理的響應時間)。MySQL客戶機使用請求來與MySQL服務器聯系,修改或查詢服務器所擁有的數據庫。 在支持數據庫的Web應用程序中,數據庫客戶機是Web服務器或由Web服務器產生的CGI腳本。 這些客戶機可以用高級腳本語言或低級系統語言編寫,只要存在這種語言的數據庫API即可。在Linux中,大多數腳本語言是以C 實現的,因為存在MySQL C API,所以要將MySQL支持添加到任何現有的腳本語言或工具應該很容易。絕大部分腳本語言已經完成了這一步。
MySQL API
MySQL API可用于各種語言,包括幾乎所有編寫網站后端所實際使用的語言。 使用這些API,我們可以構建由Web服務器控制的 MySQL客戶機。
API(用于數據庫訪問)以基于連接的模式工作。客戶機必須做的第一件事是打開與MySQL服務器的連接。 這包括適當地使用服務器認識的用戶名和口令來對連接進行身份認證。建立了連接后,服務器選擇要使用的特定數據庫。 確定了初始化后,客戶機應用程序(就我們來說是服務器方CGI腳本)就能自由地與數據庫以兩種方式中的一種進行交互:可以運行常規SQL命令,包括添加和刪除表,以及向它們添加記錄;也可以對返回結果的數據庫運行查詢。 查詢生成一組與查詢匹配的記錄,然后,客戶機可以逐一訪問記錄,直到查看完所有記錄,或者客戶機取消暫掛的記錄檢索。一旦腳本完成了對數據庫的操作后,與服務器的連接就被關閉。
要構建集成數據庫訪問的網站,需要編寫CGI腳本來根據數據庫狀態生成動態結果。Web服務器啟動CGI腳本,然后將適當格式化的HTML輸出到它們的標準輸出流中。Web服務器捕捉到HTML后將它發送回客戶機,如同請求是對靜態HTML頁面進行的那樣。 在生成 HTML 的過程中,腳本可以修改數據庫,也可以查詢并將結果合并到它們的輸出中。
作為簡單解釋上述過程的一個示例,下面的代碼(以C和Tcl編寫)查詢一個包含某公司供銷售的產品清單的數據庫。 這絕沒有使用兩種語言MySQL API的所有特性,但提供了快速、簡易擴展的示例,可以對數據庫內容執行任何SQL命令。 在該例中,腳本顯示了低于特定價格的所有產品。 在實踐中,用戶可能在Web瀏覽器中輸入該價格,然后將它發給服務器。 我們省去了從環境變量中進行讀取來確定 HTML 表單值的細節,因為它與不支持數據庫的 CGI 腳本中執行的情況沒有什么差別。 為清晰起見,我們假設事先設置了特定一些參數(例如要查詢的價格)。
以下代碼是使用免費獲得的Tcl Generic Database Interface以Tcl實現的。這樣一種接口的好處在于Tcl是解釋型的,可以對代碼進行迅速開發和快速修改。
關鍵字:MySQL、數據庫、服務器
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解