您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎么理解MySQL的API接口,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
MySQL 的 API 接口
為了方便應用程序的開發,MySQL 提供了用 C 編程語言編寫的客戶機庫,它允許從任何 C 程序的內部訪問 MySQL 數據庫。客戶機庫實現應用程序編程接口(API),API 定義客戶機程序如何建立和執行與服務器的通信。
然而,使用 C 來編寫 MySQL 程序并不受限制。許多其他語言處理器本身也是由 C 編寫的,或具有使用 C 庫的能力,所以 MySQL 客戶機庫提供了這個方法,由此, MySQL 對這些語言的約束可以建立在 C API 的上面。這就為與 MySQL 服務器通信而編寫應用程序提供了許多選擇。客戶機程序的 API 是用 Perl、PHP、Java、Python、C++、Tcl 和其他一些語言編寫的。
每種語言約束都定義自己的接口,特別是訪問 MySQL 的規則。這里沒有足夠的時間來討論 MySQL 可使用的每種 API,我們只講述最流行的三種:
■ C 客戶機庫 API。這是 MySQL 的基本編程接口。
■ Perl 通用目標腳本語言的 DBI(數據庫接口)API。DBI 是作為與其他模塊在 DBD(數據庫驅動程序)級接口的 Perl 模塊來實現的,每個模塊都提供對特定類型的數據庫引擎的訪問(當然,我們將討論的特定的 DBD 模塊也提供對 MySQL 的支持)。DBI 對 MySQL 的最普遍用法是編寫由命令行來調用的獨立的客戶機,以及試圖由 Web 服務器調用的腳本來提供 Web 對 MySQL 的訪問。
■ PHP API。PHP 是一種腳本語言,它提供了在 Web 頁中嵌入程序的一種便利的方法。在發送以前,這樣的頁面由 PHP 來處理,它允許這些腳本生成動態的內容,如在頁面中包括 MySQL 查詢的結果。“PHP” 原始的意思是個人主頁( Personal Home Page),但是 PHP 的成長已經遠遠超過它簡單的原始功能。PHP Web 站點現在使用的這個名稱表示“PHP:超文本預處理程序( Hypertext Preprocessor)”,它像 GNU(是 GUN 而不是 UNIX )一樣以同樣的方式自我引用。
當標準的 MySQL 客戶機不能滿足需要時,您并不總是需要編寫自己的程序。其他一些人一直編寫程序,而這些程序中有許多是可共享得到的。只要找到幾個就能節省您的許多工作。
以上這三種 API 都有專門章節詳細說明。本章只提供對 API 比較的概述,用來說明它們的基本特征,并給出對特定的應用程序可能選擇某個而不是其他 API 的原因。
當然,不必只考慮某個 API,應了解每個 API,并用可以明智選擇適合自己的 API。在包括若干組件的大項目中,可能使用多個 API,多種語言,這取決于每個子任務適合哪一種語言。
CAPI 用于編譯 C 程序上下文環境內部。它是一種客戶機庫,提供可用來與 MySQL 服務器對話的最低級別的接口——具有創建與服務器通信所需的能力。DBI 和 PHP 的前身 DBI 的 Perl 前身是 Mysqlperl 模塊 Mysql.pm。這個模塊不再被支持,而且不應該用于新的 MySQL 的開發。有一件事需要明白,Mysqlperl 是依賴于 MySQL 的,但DBI 不是。如果編寫 MySQL 的 Perl 應用程序,然后,決定想用另外一種數據庫引擎來使用它們,則移植 DBI 腳本比 Mysqlperl 腳本更容易一些,因為它們很少依賴于特定的數據庫引擎。
如果獲取了訪問 MySQL 的一段 Perl 腳本,并發現它是用 Mysqlperl 而不是 DBI 編寫的,則仍然可以使用 DBI。DBI 包括了對 Mysqlperl 的仿真支持,因此不需要安裝兩個程序包。PHP3 的前身是 PHP/FI 2.0 (FI代表“ form interpreter ,即格式解釋程序”)。像 Mysqlperl 一樣,PHP/FI 也是過時的,所以我們就不再進一步討論它了。
MySQL C API 的起源如果已經有編寫 mSQL RDBMS 程序的經驗,那么將注意到 MySQLC API 類似于 mSQL 相應的 C API。當 MySQL 的開發者們開始實現他們的 SQL 引擎時,許多有用的共享實用程序可用于 mSQL。要想花費最小的難度將那些 mSQL 實用程序移植為 MySQL 的實用程序是可能的,可有意地將 MySQLAPI 設計為與mSQL API 類似(MySQL 甚至帶有與 mSQL API 函數名稱相應的 MySQL 名稱的簡單的文本替代品的msql2mysql 腳本。這個操作相對煩瑣,實際上也照顧了許多涉及為使用 MySQL 而轉換 mSQL 程序的工作)。
MySQL 分發包提供的C 客戶機是基于這個 API 的。C 客戶機庫也作為 MySQL 對其他語言約束的基礎來提供服務,但 Java API 是一個例外。例如,通過連接 MySQLC 客戶機庫代碼,MySQL 可用 Perl DBI 模塊專有的MySQL驅動程序和 PHP 代碼。
Perl DBI APIDBI API 用于 Perl 腳本語言編寫的應用程序的上下文環境內部。這種 API 在我們考慮的這三種 API 結構中是最高的,因為它可與許多數據庫工作,而同時在腳本中可忽略許多特定數據庫的細節。DBI 經過使用兩級結構的 Perl 模塊來實現。
■ DBI (數據庫接口)級。為客戶機腳本提供接口。這個級別提供的是抽象接口,并不是指特定數據庫引擎。
■ DBD (數據庫驅動器)級。在這個級別由特定引擎的驅動程序來提供對各種數據庫引擎的支持。
MySQL 對 DBI 的支持環境由 Msql - Mysql - modules 分發包提供。這個模塊在DBD 級操作。可以從分發包名稱中分辨它,一個驅動程序可以提供對一個以上的RDBMS 的支持。Msql-Mysql-Modules 最初是為mSQL 而編寫的,后來擴展到MySQL。這種影響類似于對 mSQL 和 MySQL 的 CAPI。由于設計的 MySQLCAPI 類似于 mSQL CAPI,所以將 mSQL DBD(使用 mSQL C API)擴展到對MySQL的使用很有意義。
DBI 體系結構編寫應用程序的風格相對普通。當編寫 DBI 腳本時,可使用一組標準的調用。DBI 級在 DBD 級調用適當的驅動程序來處理請求,對于想使用的特定數據庫服務器通信中包括的特定問題,由驅動程序處理。DBD 級傳送從服務器返回的數據,備份到 DBI 級,使數據出現在應用程序中。數據的格式與數據庫的數據來源一致。
其結果得到這樣一個接口,該接口從應用程序的編寫者的觀點隱藏了數據庫引擎之間的差異,這樣可使用多種不同的引擎——和驅動程序一樣多。DBI 通過允許以統一風格訪問每個數據庫來提供一致性客戶接口以增加可移植性。
當打開數據庫時,出現由腳本編寫的數據庫專有的界面。當創建連接時,應指出使用哪個驅動程序。
連接以后,對該驅動程序不需要再做任何做特殊的引用。讓 DBI 和該驅動程序解決數據庫專有的細節。
無論如何這都是理論問題。然而,至少有兩個因素與 DBI 腳本的可移植性矛盾:
■ 在RDBMS 引擎之間 SQL 的實現不同,為一個引擎編寫的 SQL 另一個引擎根本不理解是完全可能的。如果 SQL 相當通用,則腳本可在引擎之間作相應的移植。但如果 SQL 依賴于引擎,則腳本也是這樣。例如,如果使用 MySQL 指定的 SHOW TABLES 語句,則該腳本不能用其他數據庫執行。
■ DBD 模塊通常提供引擎專有類型的信息來允許腳本編寫者使用特定數據庫系統的特定功能。例如, MySQLDBD 提供訪問查詢結果中列屬性的方法,如每列的最大長度、列是否是數值型的,等等。而這些屬性在其他數據庫中沒有任何相似物。DBD 專有的特性與可移植性相背,通過使用它們,將 MySQL 編寫的腳本用于其他數據庫系統是困難的。
盡管存在數據庫專有腳本的這兩個因素,但以抽象方式提供數據庫訪問的 DBI 機制是完成可移植性的合理方式,只要您決定利用它多少次即可。
像 Perl 一樣,PHP 也是一種腳本語言。但它與Perl 不同,PHP 很少作為通用目標語言來設計,而是作為編寫 Web 應用程序的一種語言。PHP API 主要作為在 Web 頁面中嵌入可執行腳本的一種方法來使用。這使Web 的開發者們很容易用動態生成上下文環境來編寫頁面。
當客戶瀏覽器向 Web 服務器發送 PHP 頁面的請求時,PHP 執行在該頁面中它所發現的任何腳本,并用腳本的輸出來替換它。該結果再送回瀏覽器。這就使瀏覽器中實際出現的頁面根據請求的頁面環境的不同而有所不同。例如,當在 Web 頁面中嵌入下面簡短的 PHP 腳本時,它出現所請求頁面的主機 IP 地址:
可以使用腳本為訪問者提供基于數據庫上下文環境的最新信息。下面的樣例說明可用于 Historical League Web 站點的一個簡單腳本。該腳本發布一個請求來確定當前的 League 的成員數目,并將該數目報告給訪問該站點的人(如果出現錯誤,則該腳本不報告任何數目):
盡管 DBI 級是獨立于數據庫的,而 DBD 級是依賴于數據庫的,但那并不是“ DBI”和“DBD”所代表的意義。它們的意思是“數據庫接口”和“數據庫驅動程序”。
PHP 腳本通常看起來像是帶有嵌入在“ ”標識符中的腳本的 HTML 頁面。一個頁面可能包括若干個腳本。這為腳本的開發提供了一種非常靈活的方法。例如,如果您喜歡,可以編寫一個正常的 HTML 頁面來創建通用的頁面框架,然后再增加腳本的內容。
對于不同的數據庫引擎,PHP 對統一的接口不再作任何事情, DBI 也用這種方法。取而代之,每個引擎的接口看起來非常像相應的實現該引擎低級 API 的 C 庫接口。例如,用于從 PHP 腳本內部訪問 MySQL 的PHP 函數的名稱非常類似于 MySQL C 客戶庫中函數的名稱。
關于怎么理解MySQL的API接口就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。