• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      PHP 與MySQL 平臺下的事務(wù)實現(xiàn)探討

      2012-09-12 01:01:08朱海巖趙新平
      重慶高教研究 2012年5期
      關(guān)鍵詞:數(shù)據(jù)表線程事務(wù)

      朱海巖,趙新平

      (呂梁學(xué)院汾陽師范分校信息技術(shù)系,山西 汾陽 032200)

      事務(wù)是一個或一系列查詢,這些查詢可以保證在數(shù)據(jù)庫中作為一個整體全部執(zhí)行或者全部不執(zhí)行[1].一個事務(wù)所涉及的操作如果全部被執(zhí)行則稱為該事務(wù)被提交了,否則,數(shù)據(jù)庫的狀態(tài)會回到事務(wù)執(zhí)行之前的狀態(tài),稱為事務(wù)被回滾了.這樣,數(shù)據(jù)庫就可以在事務(wù)執(zhí)行成功或者不成功的情況下都保持一致狀態(tài).

      1 關(guān)于MyISAM和InnoDB

      MySQL數(shù)據(jù)庫支持許多不同的存儲引擎,這些存儲引擎決定了表的內(nèi)部實現(xiàn).數(shù)據(jù)庫中的每個表可以采用不同的存儲引擎,而且可以相互轉(zhuǎn)換.在所有的存儲引擎中,使用最廣泛的是My-ISAM 和 InnoDB[2-3].大多數(shù)的數(shù)據(jù)庫應(yīng)用程序都會使用MyISAM或者InnoDB或者兩者的結(jié)合.

      MyISAM是MySQL中創(chuàng)建數(shù)據(jù)表所默認(rèn)采用的存儲引擎類型.它基于傳統(tǒng)的ISAM(有索引的順序訪問方法)存儲引擎,是用于存儲記錄和文件的標(biāo)準(zhǔn)方法.MyISAM具有檢查和修復(fù)表格的大多數(shù)工具,該類型的表格可以被壓縮,也支持全文搜索,但它們不是事務(wù)安全的,也不支持外鍵[4].

      InnoDB是一種事務(wù)安全的存儲引擎.也就是說,這種存儲引擎提供了事務(wù)的提交和回滾功能,另外InnoDB還支持外鍵[1].雖然基于此存儲引擎的數(shù)據(jù)表查詢速度比MyISAM慢,但是在要求事

      務(wù)安全的應(yīng)用中,使用InnoDB顯然會比較方便.

      2 情境假設(shè)

      假設(shè)某網(wǎng)上書店的后臺數(shù)據(jù)庫中存在orders和order_items兩個表,其中orders表存儲訂單號、客戶編號、訂單金額和訂單提交日期,order_items表存儲訂單編號、圖書ISBN號、圖書數(shù)量,兩個表的邏輯結(jié)構(gòu)分別為:

      很顯然,當(dāng)一個訂單被提交或者某個訂單信息需要刪除時,需要同時更新這兩個表的數(shù)據(jù).如果一個表得到更新而另外一個表更新失敗,則數(shù)據(jù)庫中就會存在不一致的狀態(tài)[3].所以,對于這兩個表的操作構(gòu)成一個事務(wù),要么全部完成,要么全部不做,不允許部分完成.

      下面分別針對InnoDB和MyISAM存儲引擎說明事務(wù)的實現(xiàn)方式.

      3 基于InnoDB存儲引擎的事務(wù)實現(xiàn)

      3.1 用 begin(或 start transaction)、commit、rollback實現(xiàn)

      在MySQL中,可以通過向數(shù)據(jù)庫服務(wù)器發(fā)送“begin”指令或“start transaction”指令表示一個事務(wù)的開始[5].事務(wù)一旦開始,向數(shù)據(jù)庫做出的所有修改操作都會被緩存,直至執(zhí)行到“commit”指令.也就是說,在“commit”指令之前的對于數(shù)據(jù)庫的操作并沒有真正寫入數(shù)據(jù)庫,因此對于其它用戶是不可見的.如果事務(wù)中的某個操作失敗,則應(yīng)該使用“rollback”指令撤銷之前的其它操作,數(shù)據(jù)庫會回到事務(wù)執(zhí)行之前的狀態(tài)[6-7].

      上面提到的網(wǎng)上書店實例中,當(dāng)一個訂單被提交之后,應(yīng)該向orders表、order_items表分別添加相應(yīng)的信息.對這兩個表的插入操作應(yīng)該作為一個事務(wù),具體操作如下:

      3.2 用set改變MySQL的自動提交模式

      在默認(rèn)情況下,MySQL是以自動提交(autocommit)模式運行的,即向數(shù)據(jù)庫發(fā)送的每一條指令都是一個事務(wù),即時提交[8].如果某事務(wù)由多個操作組成,則此種提交方式不符合事務(wù)的要求.解決方法是可以用“set autocommit=0”指令關(guān)閉自動提交,則提交給數(shù)據(jù)庫服務(wù)器的指令只是被緩存,并不立即寫入數(shù)據(jù)庫[9],等指令全部結(jié)束之后,用“commit”指令手動提交,事務(wù)結(jié)束后,再執(zhí)

      4 基于MyISAM存儲引擎的事務(wù)實現(xiàn)

      基于MyISAM存儲引擎的數(shù)據(jù)表不支持事務(wù),只能采用手動鎖定數(shù)據(jù)表的方式避免并發(fā)操作可能造成的數(shù)據(jù)不一致的問題[10].基本思想是:向數(shù)據(jù)庫發(fā)送“LOCK TABLES‘xyz’READ/WRITE”查詢,鎖定xyz表,READ表示鎖定類型為讀鎖定,WRITE表示鎖定類型為寫鎖定.如果一個線程獲得在一個表上的READ鎖,那么該線程和所有其他線程只能從表中讀數(shù)據(jù),不能進(jìn)行任何寫操作;如果一個線程在一個表上得到一個WRITE鎖,那么只有擁有這個鎖的線程可以從表中讀取和寫表,其它的線程被阻塞[11].當(dāng)前線程向數(shù)據(jù)庫服務(wù)器發(fā)送“UNLOCK TABLES”查詢或當(dāng)前線程與數(shù)據(jù)庫服務(wù)器的連接被關(guān)閉后,所有由當(dāng)前線程鎖定的表被解鎖.

      具體操作過程如下:

      5 結(jié)語

      事務(wù)處理是數(shù)據(jù)庫操作中一個不可回避的問題.在設(shè)計數(shù)據(jù)表時需要考慮是否會涉及事務(wù)應(yīng)用,再根據(jù)具體情況選用不同的存儲引擎.如果表格只是應(yīng)用于大規(guī)模的查詢操作,建議采用MyISAM存儲引擎;如果表格應(yīng)用于頻繁的插入和刪除操作,建議采用InnoDB存儲引擎.雖然理論上可以先轉(zhuǎn)換數(shù)據(jù)表的存儲引擎,再去完成相應(yīng)操作,但對于訪問量大的數(shù)據(jù)庫而言,頻繁轉(zhuǎn)換存儲引擎是不現(xiàn)實的.所以基于MyISAM和InnoDB存儲引擎的事務(wù)實現(xiàn)是從事PHP和MySQL平臺Web應(yīng)用開發(fā)所必須掌握的基本技能.

      [1]LukeWelling,Laura Thomson.PHP和 MySQLWeb開發(fā)[M].武欣,譯.北京:機(jī)械工業(yè)出版社,2009:307 -310.

      [2]Paul D B,楊曉云,王建橋,等.MySQL技術(shù)內(nèi)幕:第4版[M].北京:人民郵電出版社,2011:624-689.

      [3]Charles A B.深入理解 MySQL:第1版[M].楊濤,王建橋,楊曉云,等譯.北京:人民郵電出版社,2010:382-416.

      [4]Russell J,Dyer T.MySQL 核心技術(shù)手冊:第2 版[M].李紅軍,李冬梅,譯:北京:機(jī)械工業(yè)出版社,2009:359-429.

      [5]王威.MySQL數(shù)據(jù)庫源代碼分析及存儲引擎的設(shè)計[D].南京:南京郵電大學(xué),2012:35 -40.

      [6]陳虎,唐海浩,廖江苗,等.面向批量插入優(yōu)化的并行存儲引擎 MTPower[J].計算機(jī)學(xué)報,2010(8):1492 -1499.

      [7]李亞偉.MySQL的存儲安全的研究與實現(xiàn)[D].武漢:華中科技大學(xué),2011:18-23.

      [8]顧治華,忽朝儉.MySQL存儲引擎與數(shù)據(jù)庫性能[J].計算機(jī)時代,2006(10):8-10.

      [9]馬永成,肖詩斌,王弘蔚,等.MySql存儲引擎的研究和實現(xiàn)[J].計算機(jī)科學(xué),2007,34(12):173 -175.

      [10]羅凡,裴士輝,張雪松,等.MySQL中 InnoDB引擎的動態(tài)存儲管理[J].東北師大學(xué)報:自然科學(xué)版,2006,38(1):22 -26.

      [11]黃雅萍,劉曉強,吳成義.基于MySQL和PHP的分布式事務(wù)處理[J].東華大學(xué)學(xué)報:自然科學(xué)版,2011,37(1):81 -85.

      猜你喜歡
      數(shù)據(jù)表線程事務(wù)
      “事物”與“事務(wù)”
      基于分布式事務(wù)的門架數(shù)據(jù)處理系統(tǒng)設(shè)計與實現(xiàn)
      河湖事務(wù)
      湖北省新冠肺炎疫情數(shù)據(jù)表
      黨員生活(2020年2期)2020-04-17 09:56:30
      基于列控工程數(shù)據(jù)表建立線路拓?fù)潢P(guān)系的研究
      淺談linux多線程協(xié)作
      圖表
      基于VSL的動態(tài)數(shù)據(jù)表應(yīng)用研究
      河南科技(2014年24期)2014-02-27 14:19:25
      SQLServer自治事務(wù)實現(xiàn)方案探析
      Linux線程實現(xiàn)技術(shù)研究
      栾川县| 阳原县| 鄱阳县| 梅州市| 深泽县| 奎屯市| 贵州省| 广水市| 汉中市| 徐闻县| 集贤县| 襄城县| 青岛市| 水城县| 盘锦市| 浮梁县| 奉节县| 临夏市| 丽水市| 宁国市| 温宿县| 永平县| 祥云县| 山西省| 霍州市| 扎赉特旗| 都江堰市| 永仁县| 高邮市| 汝阳县| 义乌市| 棋牌| 化州市| 五原县| 裕民县| 新干县| 永康市| 白朗县| 贵州省| 天峨县| 门源|