溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么理解MySQL的API接口

發(fā)布時(shí)間:2021-11-17 09:31:50 來源:億速云 閱讀:223 作者:柒染 欄目:MySQL數(shù)據(jù)庫

這篇文章給大家介紹怎么理解MySQL的API接口,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

MySQL 的 API 接口

為了方便應(yīng)用程序的開發(fā),MySQL 提供了用 C 編程語言編寫的客戶機(jī)庫,它允許從任何 C 程序的內(nèi)部訪問 MySQL 數(shù)據(jù)庫??蛻魴C(jī)庫實(shí)現(xiàn)應(yīng)用程序編程接口(API),API 定義客戶機(jī)程序如何建立和執(zhí)行與服務(wù)器的通信。
  然而,使用 C 來編寫 MySQL 程序并不受限制。許多其他語言處理器本身也是由 C 編寫的,或具有使用 C 庫的能力,所以 MySQL 客戶機(jī)庫提供了這個(gè)方法,由此, MySQL 對(duì)這些語言的約束可以建立在 C API 的上面。這就為與 MySQL 服務(wù)器通信而編寫應(yīng)用程序提供了許多選擇??蛻魴C(jī)程序的 API 是用 Perl、PHP、Java、Python、C++、Tcl 和其他一些語言編寫的。

  每種語言約束都定義自己的接口,特別是訪問 MySQL 的規(guī)則。這里沒有足夠的時(shí)間來討論 MySQL 可使用的每種 API,我們只講述最流行的三種:

  ■ C 客戶機(jī)庫 API。這是 MySQL 的基本編程接口。

  ■ Perl 通用目標(biāo)腳本語言的 DBI(數(shù)據(jù)庫接口)API。DBI 是作為與其他模塊在 DBD(數(shù)據(jù)庫驅(qū)動(dòng)程序)級(jí)接口的 Perl 模塊來實(shí)現(xiàn)的,每個(gè)模塊都提供對(duì)特定類型的數(shù)據(jù)庫引擎的訪問(當(dāng)然,我們將討論的特定的 DBD 模塊也提供對(duì) MySQL 的支持)。DBI 對(duì) MySQL 的最普遍用法是編寫由命令行來調(diào)用的獨(dú)立的客戶機(jī),以及試圖由 Web 服務(wù)器調(diào)用的腳本來提供 Web 對(duì) MySQL 的訪問。

  ■ PHP API。PHP 是一種腳本語言,它提供了在 Web 頁中嵌入程序的一種便利的方法。在發(fā)送以前,這樣的頁面由 PHP 來處理,它允許這些腳本生成動(dòng)態(tài)的內(nèi)容,如在頁面中包括 MySQL 查詢的結(jié)果?!癙HP” 原始的意思是個(gè)人主頁( Personal Home Page),但是 PHP 的成長已經(jīng)遠(yuǎn)遠(yuǎn)超過它簡單的原始功能。PHP Web 站點(diǎn)現(xiàn)在使用的這個(gè)名稱表示“PHP:超文本預(yù)處理程序( Hypertext Preprocessor)”,它像 GNU(是 GUN 而不是 UNIX )一樣以同樣的方式自我引用。

  當(dāng)標(biāo)準(zhǔn)的 MySQL 客戶機(jī)不能滿足需要時(shí),您并不總是需要編寫自己的程序。其他一些人一直編寫程序,而這些程序中有許多是可共享得到的。只要找到幾個(gè)就能節(jié)省您的許多工作。

  以上這三種 API 都有專門章節(jié)詳細(xì)說明。本章只提供對(duì) API 比較的概述,用來說明它們的基本特征,并給出對(duì)特定的應(yīng)用程序可能選擇某個(gè)而不是其他 API 的原因。

  當(dāng)然,不必只考慮某個(gè) API,應(yīng)了解每個(gè) API,并用可以明智選擇適合自己的 API。在包括若干組件的大項(xiàng)目中,可能使用多個(gè) API,多種語言,這取決于每個(gè)子任務(wù)適合哪一種語言。

  CAPI 用于編譯 C 程序上下文環(huán)境內(nèi)部。它是一種客戶機(jī)庫,提供可用來與 MySQL 服務(wù)器對(duì)話的最低級(jí)別的接口——具有創(chuàng)建與服務(wù)器通信所需的能力。DBI 和 PHP 的前身 DBI 的 Perl 前身是 Mysqlperl 模塊 Mysql.pm。這個(gè)模塊不再被支持,而且不應(yīng)該用于新的 MySQL 的開發(fā)。有一件事需要明白,Mysqlperl 是依賴于 MySQL 的,但DBI 不是。如果編寫 MySQL 的 Perl 應(yīng)用程序,然后,決定想用另外一種數(shù)據(jù)庫引擎來使用它們,則移植 DBI 腳本比 Mysqlperl 腳本更容易一些,因?yàn)樗鼈兒苌僖蕾囉谔囟ǖ臄?shù)據(jù)庫引擎。

  如果獲取了訪問 MySQL 的一段 Perl 腳本,并發(fā)現(xiàn)它是用 Mysqlperl 而不是 DBI 編寫的,則仍然可以使用 DBI。DBI 包括了對(duì) Mysqlperl 的仿真支持,因此不需要安裝兩個(gè)程序包。PHP3 的前身是 PHP/FI 2.0 (FI代表“ form interpreter ,即格式解釋程序”)。像 Mysqlperl 一樣,PHP/FI 也是過時(shí)的,所以我們就不再進(jìn)一步討論它了。

  MySQL C API 的起源如果已經(jīng)有編寫 mSQL RDBMS 程序的經(jīng)驗(yàn),那么將注意到 MySQLC API 類似于 mSQL 相應(yīng)的 C API。當(dāng) MySQL 的開發(fā)者們開始實(shí)現(xiàn)他們的 SQL 引擎時(shí),許多有用的共享實(shí)用程序可用于 mSQL。要想花費(fèi)最小的難度將那些 mSQL 實(shí)用程序移植為 MySQL 的實(shí)用程序是可能的,可有意地將 MySQLAPI 設(shè)計(jì)為與mSQL API 類似(MySQL 甚至帶有與 mSQL API 函數(shù)名稱相應(yīng)的 MySQL 名稱的簡單的文本替代品的msql2mysql 腳本。這個(gè)操作相對(duì)煩瑣,實(shí)際上也照顧了許多涉及為使用 MySQL 而轉(zhuǎn)換 mSQL 程序的工作)。

  MySQL 分發(fā)包提供的C 客戶機(jī)是基于這個(gè) API 的。C 客戶機(jī)庫也作為 MySQL 對(duì)其他語言約束的基礎(chǔ)來提供服務(wù),但 Java API 是一個(gè)例外。例如,通過連接 MySQLC 客戶機(jī)庫代碼,MySQL 可用 Perl DBI 模塊專有的MySQL驅(qū)動(dòng)程序和 PHP 代碼。

   Perl DBI APIDBI API 用于 Perl 腳本語言編寫的應(yīng)用程序的上下文環(huán)境內(nèi)部。這種 API 在我們考慮的這三種 API 結(jié)構(gòu)中是最高的,因?yàn)樗膳c許多數(shù)據(jù)庫工作,而同時(shí)在腳本中可忽略許多特定數(shù)據(jù)庫的細(xì)節(jié)。DBI 經(jīng)過使用兩級(jí)結(jié)構(gòu)的 Perl 模塊來實(shí)現(xiàn)。

  ■ DBI (數(shù)據(jù)庫接口)級(jí)。為客戶機(jī)腳本提供接口。這個(gè)級(jí)別提供的是抽象接口,并不是指特定數(shù)據(jù)庫引擎。

  ■ DBD (數(shù)據(jù)庫驅(qū)動(dòng)器)級(jí)。在這個(gè)級(jí)別由特定引擎的驅(qū)動(dòng)程序來提供對(duì)各種數(shù)據(jù)庫引擎的支持。

  MySQL 對(duì) DBI 的支持環(huán)境由 Msql - Mysql - modules 分發(fā)包提供。這個(gè)模塊在DBD 級(jí)操作??梢詮姆职l(fā)包名稱中分辨它,一個(gè)驅(qū)動(dòng)程序可以提供對(duì)一個(gè)以上的RDBMS 的支持。Msql-Mysql-Modules 最初是為mSQL 而編寫的,后來擴(kuò)展到MySQL。這種影響類似于對(duì) mSQL 和 MySQL 的 CAPI。由于設(shè)計(jì)的 MySQLCAPI 類似于 mSQL CAPI,所以將 mSQL DBD(使用 mSQL C API)擴(kuò)展到對(duì)MySQL的使用很有意義。

  DBI 體系結(jié)構(gòu)編寫應(yīng)用程序的風(fēng)格相對(duì)普通。當(dāng)編寫 DBI 腳本時(shí),可使用一組標(biāo)準(zhǔn)的調(diào)用。DBI 級(jí)在 DBD 級(jí)調(diào)用適當(dāng)?shù)尿?qū)動(dòng)程序來處理請(qǐng)求,對(duì)于想使用的特定數(shù)據(jù)庫服務(wù)器通信中包括的特定問題,由驅(qū)動(dòng)程序處理。DBD 級(jí)傳送從服務(wù)器返回的數(shù)據(jù),備份到 DBI 級(jí),使數(shù)據(jù)出現(xiàn)在應(yīng)用程序中。數(shù)據(jù)的格式與數(shù)據(jù)庫的數(shù)據(jù)來源一致。

  其結(jié)果得到這樣一個(gè)接口,該接口從應(yīng)用程序的編寫者的觀點(diǎn)隱藏了數(shù)據(jù)庫引擎之間的差異,這樣可使用多種不同的引擎——和驅(qū)動(dòng)程序一樣多。DBI 通過允許以統(tǒng)一風(fēng)格訪問每個(gè)數(shù)據(jù)庫來提供一致性客戶接口以增加可移植性。

  當(dāng)打開數(shù)據(jù)庫時(shí),出現(xiàn)由腳本編寫的數(shù)據(jù)庫專有的界面。當(dāng)創(chuàng)建連接時(shí),應(yīng)指出使用哪個(gè)驅(qū)動(dòng)程序。

  連接以后,對(duì)該驅(qū)動(dòng)程序不需要再做任何做特殊的引用。讓 DBI 和該驅(qū)動(dòng)程序解決數(shù)據(jù)庫專有的細(xì)節(jié)。
無論如何這都是理論問題。然而,至少有兩個(gè)因素與 DBI 腳本的可移植性矛盾:

  ■ 在RDBMS 引擎之間 SQL 的實(shí)現(xiàn)不同,為一個(gè)引擎編寫的 SQL 另一個(gè)引擎根本不理解是完全可能的。如果 SQL 相當(dāng)通用,則腳本可在引擎之間作相應(yīng)的移植。但如果 SQL 依賴于引擎,則腳本也是這樣。例如,如果使用 MySQL 指定的 SHOW TABLES 語句,則該腳本不能用其他數(shù)據(jù)庫執(zhí)行。

  ■ DBD 模塊通常提供引擎專有類型的信息來允許腳本編寫者使用特定數(shù)據(jù)庫系統(tǒng)的特定功能。例如, MySQLDBD 提供訪問查詢結(jié)果中列屬性的方法,如每列的最大長度、列是否是數(shù)值型的,等等。而這些屬性在其他數(shù)據(jù)庫中沒有任何相似物。DBD 專有的特性與可移植性相背,通過使用它們,將 MySQL 編寫的腳本用于其他數(shù)據(jù)庫系統(tǒng)是困難的。

  盡管存在數(shù)據(jù)庫專有腳本的這兩個(gè)因素,但以抽象方式提供數(shù)據(jù)庫訪問的 DBI 機(jī)制是完成可移植性的合理方式,只要您決定利用它多少次即可。

  像 Perl 一樣,PHP 也是一種腳本語言。但它與Perl 不同,PHP 很少作為通用目標(biāo)語言來設(shè)計(jì),而是作為編寫 Web 應(yīng)用程序的一種語言。PHP API 主要作為在 Web 頁面中嵌入可執(zhí)行腳本的一種方法來使用。這使Web 的開發(fā)者們很容易用動(dòng)態(tài)生成上下文環(huán)境來編寫頁面。

  當(dāng)客戶瀏覽器向 Web 服務(wù)器發(fā)送 PHP 頁面的請(qǐng)求時(shí),PHP 執(zhí)行在該頁面中它所發(fā)現(xiàn)的任何腳本,并用腳本的輸出來替換它。該結(jié)果再送回瀏覽器。這就使瀏覽器中實(shí)際出現(xiàn)的頁面根據(jù)請(qǐng)求的頁面環(huán)境的不同而有所不同。例如,當(dāng)在 Web 頁面中嵌入下面簡短的 PHP 腳本時(shí),它出現(xiàn)所請(qǐng)求頁面的主機(jī) IP 地址:

  可以使用腳本為訪問者提供基于數(shù)據(jù)庫上下文環(huán)境的最新信息。下面的樣例說明可用于 Historical League Web 站點(diǎn)的一個(gè)簡單腳本。該腳本發(fā)布一個(gè)請(qǐng)求來確定當(dāng)前的 League 的成員數(shù)目,并將該數(shù)目報(bào)告給訪問該站點(diǎn)的人(如果出現(xiàn)錯(cuò)誤,則該腳本不報(bào)告任何數(shù)目):

  盡管 DBI 級(jí)是獨(dú)立于數(shù)據(jù)庫的,而 DBD 級(jí)是依賴于數(shù)據(jù)庫的,但那并不是“ DBI”和“DBD”所代表的意義。它們的意思是“數(shù)據(jù)庫接口”和“數(shù)據(jù)庫驅(qū)動(dòng)程序”。

  PHP 腳本通??雌饋硐袷菐в星度朐凇?”標(biāo)識(shí)符中的腳本的 HTML 頁面。一個(gè)頁面可能包括若干個(gè)腳本。這為腳本的開發(fā)提供了一種非常靈活的方法。例如,如果您喜歡,可以編寫一個(gè)正常的 HTML 頁面來創(chuàng)建通用的頁面框架,然后再增加腳本的內(nèi)容。

  對(duì)于不同的數(shù)據(jù)庫引擎,PHP 對(duì)統(tǒng)一的接口不再作任何事情, DBI 也用這種方法。取而代之,每個(gè)引擎的接口看起來非常像相應(yīng)的實(shí)現(xiàn)該引擎低級(jí) API 的 C 庫接口。例如,用于從 PHP 腳本內(nèi)部訪問 MySQL 的PHP 函數(shù)的名稱非常類似于 MySQL C 客戶庫中函數(shù)的名稱。

關(guān)于怎么理解MySQL的API接口就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI