国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

Linux應(yīng)用集成MySQL數(shù)據(jù)庫(kù)訪問技巧

2024-07-24 12:54:43
字體:
供稿:網(wǎng)友
本文描述了mysql,一種利用第三方數(shù)據(jù)庫(kù)開發(fā)電子貿(mào)易和其它復(fù)雜、動(dòng)態(tài)網(wǎng)站的有效工具。mysql 是一種快速、多線程和全功能的 sql服務(wù)器。除了描述mysql系統(tǒng)的基本體系結(jié)構(gòu)以外,本文還提供了以tcl和c++編寫的簡(jiǎn)單示例,幫助您開發(fā)支持?jǐn)?shù)據(jù)庫(kù)的web應(yīng)用。

一個(gè)必須存儲(chǔ)或訪問大量信息的應(yīng)用程序可以從使用第三方數(shù)據(jù)庫(kù)產(chǎn)品中受益匪淺。在對(duì)信息的訪問必須在程序的多個(gè)實(shí)例上進(jìn)行時(shí)更是如此。基于web的應(yīng)用(包括電子貿(mào)易)就是它的良好例證。

為什么使用獨(dú)立數(shù)據(jù)庫(kù)?

web服務(wù)器必須使其處理腳本有辦法來存儲(chǔ)有關(guān)供其以后訪問的狀態(tài)信息。盡管有可能使用比較原始一些的方法--例如轉(zhuǎn)儲(chǔ)到文本文件或開發(fā)自制的迷你數(shù)據(jù)庫(kù)--但只有成熟的數(shù)據(jù)庫(kù)應(yīng)用才能提供更為復(fù)雜的web應(yīng)用所需的所有服務(wù)。因?yàn)橛幸恍┟赓M(fèi)獲得的軟件包可用于該目的,所以編寫定制的特定于應(yīng)用的數(shù)據(jù)庫(kù)引擎并無太大好處。 另外,使用第三方數(shù)據(jù)庫(kù)還使者不必投入到開發(fā)和維護(hù)數(shù)據(jù)庫(kù)的任務(wù)中。

mysql數(shù)據(jù)庫(kù)

通過使用腳本語(yǔ)言和編譯型系統(tǒng)語(yǔ)言(例如 c),將數(shù)據(jù)庫(kù)集成到linux應(yīng)用就可能相當(dāng)容易。可免費(fèi)獲得的mysql(在gnu public license下發(fā)行)數(shù)據(jù)庫(kù)提供了一系列復(fù)雜的sql功能,并易于集成到應(yīng)用中。mysql是快速、多線程的,并支持ansi和odbc sql標(biāo)準(zhǔn)。加上第三方軟件,mysql就支持用于事務(wù)處理應(yīng)用的事務(wù)安全的表。

注:什么是事務(wù)處理?

事務(wù)是需要以原子方式執(zhí)行的對(duì)數(shù)據(jù)庫(kù)所做的一系列更改。它們要么必須全部執(zhí)行,要么一個(gè)都不執(zhí)行。 例如,在web上銷售產(chǎn)品時(shí)所有必需的數(shù)據(jù)庫(kù)更改組成一個(gè)事務(wù)。

數(shù)據(jù)庫(kù)需要同時(shí)減去客戶帳戶余額和產(chǎn)品庫(kù)存,否則失敗并且一個(gè)操作都不執(zhí)行。

無論服務(wù)器出于何種原因發(fā)生崩潰都不應(yīng)該引起事務(wù)被部分執(zhí)行。例如帳單多算、產(chǎn)品沒有交付,或者庫(kù)存不實(shí)等都有可能是部分完成的事務(wù)的結(jié)果。

支持事務(wù)處理的數(shù)據(jù)庫(kù)可以將一組數(shù)據(jù)庫(kù)代碼封裝在一個(gè)事務(wù)中,在事務(wù)執(zhí)行期間的任何失敗會(huì)讓數(shù)據(jù)庫(kù)回滾到事務(wù)開始之前的狀態(tài)。

這是通過維護(hù)所有數(shù)據(jù)庫(kù)操作的日志,以及其原始狀態(tài)表的副本來實(shí)現(xiàn)的,在失敗后下一次重新啟動(dòng)服務(wù)器時(shí)允許回滾操作。 這種時(shí)間和空間上的開銷是事務(wù)安全數(shù)據(jù)庫(kù)系統(tǒng)所必需的一種折衷。

單一mysql服務(wù)器控制著一系列數(shù)據(jù)庫(kù),它們都可以通過服務(wù)器以類似方式來訪問。 每個(gè)數(shù)據(jù)庫(kù)實(shí)際上都是一組任意數(shù)量的表,概念與其它sql數(shù)據(jù)庫(kù)的用戶類似。每個(gè)表都由帶類型的數(shù)據(jù)列組成。 數(shù)據(jù)可以是整數(shù)、實(shí)數(shù)值、字符串或其它類型,包括原始二進(jìn)制流。 表中的每一行都是存儲(chǔ)在數(shù)據(jù)庫(kù)中的一個(gè)記錄。

mysql被設(shè)計(jì)和構(gòu)造成客戶機(jī)/服務(wù)器。 服務(wù)器mysqld可以在能從因特網(wǎng)訪問到的任何機(jī)器上運(yùn)行(最好與web服務(wù)器在同一臺(tái)或最接近的一臺(tái)機(jī)器上,以確保合理的響應(yīng)時(shí)間)。mysql客戶機(jī)使用請(qǐng)求來與mysql服務(wù)器聯(lián)系,修改或查詢服務(wù)器所擁有的數(shù)據(jù)庫(kù)。 在支持?jǐn)?shù)據(jù)庫(kù)的web應(yīng)用程序中,數(shù)據(jù)庫(kù)客戶機(jī)是web服務(wù)器或由web服務(wù)器產(chǎn)生的cgi腳本。 這些客戶機(jī)可以用高級(jí)腳本語(yǔ)言或低級(jí)系統(tǒng)語(yǔ)言編寫,只要存在這種語(yǔ)言的數(shù)據(jù)庫(kù)api即可。在linux中,大多數(shù)腳本語(yǔ)言是以c 實(shí)現(xiàn)的,因?yàn)榇嬖趍ysql c api,所以要將mysql支持添加到任何現(xiàn)有的腳本語(yǔ)言或工具應(yīng)該很容易。絕大部分腳本語(yǔ)言已經(jīng)完成了這一步。

mysql api

mysql api可用于各種語(yǔ)言,包括幾乎所有編寫網(wǎng)站后端所實(shí)際使用的語(yǔ)言。 使用這些api,我們可以構(gòu)建由web服務(wù)器控制的 mysql客戶機(jī)。

api(用于數(shù)據(jù)庫(kù)訪問)以基于連接的模式工作。客戶機(jī)必須做的第一件事是打開與mysql服務(wù)器的連接。 這包括適當(dāng)?shù)厥褂梅?wù)器認(rèn)識(shí)的用戶名和口令來對(duì)連接進(jìn)行身份認(rèn)證。建立了連接后,服務(wù)器選擇要使用的特定數(shù)據(jù)庫(kù)。 確定了初始化后,客戶機(jī)應(yīng)用程序(就我們來說是服務(wù)器方cgi腳本)就能自由地與數(shù)據(jù)庫(kù)以兩種方式中的一種進(jìn)行交互:可以運(yùn)行常規(guī)sql命令,包括添加和刪除表,以及向它們添加記錄;也可以對(duì)返回結(jié)果的數(shù)據(jù)庫(kù)運(yùn)行查詢。 查詢生成一組與查詢匹配的記錄,然后,客戶機(jī)可以逐一訪問記錄,直到查看完所有記錄,或者客戶機(jī)取消暫掛的記錄檢索。一旦腳本完成了對(duì)數(shù)據(jù)庫(kù)的操作后,與服務(wù)器的連接就被關(guān)閉。

要構(gòu)建集成數(shù)據(jù)庫(kù)訪問的網(wǎng)站,需要編寫cgi腳本來根據(jù)數(shù)據(jù)庫(kù)狀態(tài)生成動(dòng)態(tài)結(jié)果。web服務(wù)器啟動(dòng)cgi腳本,然后將適當(dāng)格式化的html輸出到它們的標(biāo)準(zhǔn)輸出流中。web服務(wù)器捕捉到html后將它發(fā)送回客戶機(jī),如同請(qǐng)求是對(duì)靜態(tài)html頁(yè)面進(jìn)行的那樣。 在生成 html 的過程中,腳本可以修改數(shù)據(jù)庫(kù),也可以查詢并將結(jié)果合并到它們的輸出中。

作為簡(jiǎn)單解釋上述過程的一個(gè)示例,下面的代碼(以c和tcl編寫)查詢一個(gè)包含某公司供銷售的產(chǎn)品清單的數(shù)據(jù)庫(kù)。 這絕沒有使用兩種語(yǔ)言mysql api的所有特性,但提供了快速、簡(jiǎn)易擴(kuò)展的示例,可以對(duì)數(shù)據(jù)庫(kù)內(nèi)容執(zhí)行任何sql命令。 在該例中,腳本顯示了低于特定價(jià)格的所有產(chǎn)品。 在實(shí)踐中,用戶可能在web瀏覽器中輸入該價(jià)格,然后將它發(fā)給服務(wù)器。 我們省去了從環(huán)境變量中進(jìn)行讀取來確定 html 表單值的細(xì)節(jié),因?yàn)樗c不支持?jǐn)?shù)據(jù)庫(kù)的 cgi 腳本中執(zhí)行的情況沒有什么差別。 為清晰起見,我們假設(shè)事先設(shè)置了特定一些參數(shù)(例如要查詢的價(jià)格)。

以下代碼是使用免費(fèi)獲得的tcl generic database interface以tcl實(shí)現(xiàn)的。這樣一種接口的好處在于tcl是解釋型的,可以對(duì)代碼進(jìn)行迅速開發(fā)和快速修改。

tcl示例

#this code prints out all products in the database# that are below a specified price (assumed to have been determined# beforehand, and stored in the variable targetprice)# the output is in html table format, appropriate for cgi output#load the sql shared object library. the tcl interpreter could also#have been compiled with the library, making this line unnecessaryload /home/aroetter/tcl-sql/sql.so#these are well defined beforehand, or they could#be passed into the scriptset dbname "clientwebsite";set tblname "products";set dbhost "backend.company.com"set dbuser "mysqluser"set dbpasswd "abigsecret"set targetprice 200;#connect to the databaseset handle [sql connect $dbhost $dbuser $dbpasswd]sql selectdb $handle $dbname ;# get test database#run a query using the specified sql codesql query $handle "select * from $tblname where price <= $targetprice"#print out html table headerputs "<table border=4>"puts "<th>product id <th width=200>description <th>price (/$)"#output table rows - each fetchrow retrieves one result#from the sql querywhile {[set row [sql fetchrow $handle]] != ""} {    set prodid [lindex $row 0]    set descrip [lindex $row 1]    set price [lindex $row 2]    puts "<tr><td>$prodid <td align=center>$descrip <td>$price"}puts "</table>"#empty the query result buffer - should already be empty in this casesql endquery $handle#close the db connection - in practice this same connection#is used for multiple queriessql disconnect $handle



 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 德阳市| 连州市| 渝北区| 阿坝县| 岳池县| 泰宁县| 绥化市| 图木舒克市| 柳河县| 渝北区| 平安县| 常熟市| 乌拉特后旗| 和硕县| 视频| 平谷区| 达拉特旗| 阿城市| 银川市| 枣庄市| 黄山市| 南宫市| 巍山| 远安县| 手游| 辽源市| 延津县| 邮箱| 乌拉特中旗| 武清区| 开封市| 湘潭市| 田东县| 温宿县| 伊通| 泌阳县| 泾阳县| 依安县| 温州市| 恩施市| 河池市|