MySQL中事務(wù)是什么意思-創(chuàng)新互聯(lián)

小編給大家分享一下MySQL中事務(wù)是什么意思,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

我們提供的服務(wù)有:成都網(wǎng)站制作、網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、白城ssl等。為近1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的白城網(wǎng)站制作公司

一、事務(wù)的概念

  事務(wù)由單獨單元的一個或多個SQL語句組成,在這個單元中,每個MySQL語句是相互依賴的。而整個單獨單元作為一個不可分割的整體,如果單元中某條SQL語句一旦執(zhí)行失敗或產(chǎn)生錯誤,整個單元將會回滾。所有受到影響的數(shù)據(jù)將返回到事物開始以前的狀態(tài);如果單元中的所有SQL語句均執(zhí)行成功,則事物被順利執(zhí)行。

二、MySQL 中的存儲引擎以及支持事務(wù),和不支持事務(wù)的存儲引擎 

 1、存儲引擎的概念:在mysql中的數(shù)據(jù)用各種不同的技術(shù)存儲在文件(或內(nèi)存)中。

這些技術(shù)中的每一種技術(shù)都使用不同的存儲機制,索引 技巧,并且最終提供廣泛的不同的功能和能力。可以通過選擇不同的技術(shù),可以獲得額外的速度或功能,從而改善應(yīng)用的整體功能。

 2、這些不同的技術(shù)以及配套的相關(guān)功能在mysql中被稱為存儲引擎(也稱為表類型)。

 3、通過show engines;來查看mysql支持的存儲引擎。

 4、 在mysql中用的最多的存儲引擎有:innodb,bdb,myisam ,memory 等。其中innodb和bdb支持事務(wù)而myisam等不支持事務(wù)。

三、事務(wù)的四個屬性:

 1、原子性:事務(wù)是由一個或一組相互關(guān)聯(lián)的SQL語句組成,這些語句被認為是一個不可分割的單元。

 2、一致性:對于數(shù)據(jù)庫的修改是一致的,即多個用戶查的的數(shù)據(jù)是一樣的。一致性主要由mysql的日志機制處理,他記錄數(shù)據(jù)的變化,為事務(wù)恢復(fù)提供跟蹤記錄。

 3、隔離性(孤立性):每個事務(wù)都有自己的空間,和其他發(fā)生在系統(tǒng)中的事務(wù)隔離開來,而且事務(wù)的結(jié)果只在他完全被執(zhí)行時才能看到

 4、持久性:但提交了這個事務(wù)之后對數(shù)據(jù)的修改更新就是永久的。當一個事務(wù)完成,數(shù)據(jù)庫的日志已經(jīng)被更新時,持久性即可發(fā)揮其特有的 功效,在mysql中,如果系統(tǒng)崩潰或者數(shù)據(jù)存儲介質(zhì)被破壞,通過日志,系統(tǒng)能夠恢復(fù)在重啟前進行的最后一次成功更新,可以反應(yīng)系統(tǒng)崩潰時處于執(zhí)行過程的事物的變化。

四、事務(wù)的創(chuàng)建及生存周期

對于支持事務(wù)的存儲引擎,一個事務(wù)的周期:

1、在創(chuàng)建事務(wù)的過程中,用戶需要創(chuàng)建一個innodb或bdb類型的數(shù)據(jù)表,其基本命令結(jié)構(gòu)如下:

 create table table_name (file defintions) type=innodb/bdb;

2、對表類型進行修改

 alert table table-name type =innodb/bdb;

3、事務(wù)的整個過程

 use databases;  //使用某個數(shù)據(jù)庫

 start transaction ;  //開始事務(wù) 、這里也可以使用 begin  、 beginwork

 insert into stu1 values('', );  //進行相關(guān)的操作

 commit   //提交事物

 rollback  //撤銷事務(wù)(事務(wù)回滾)

五:mysql行為

 1、我們在使用mysql是如果關(guān)閉之后,打開在查詢的話就會發(fā)現(xiàn),哪些數(shù)據(jù)已經(jīng)保存了,但是我們知道,在這過程中沒有進行顯示或隱式提交,問什么會這樣那?因為我們在mysql中設(shè)置了自動提交,但我們也可以改為手動提交。

 2、 set  autocommit =0; //關(guān)閉自動提交

3、 set  autocommit =1; //開啟自動提交

六、事務(wù)的孤立性(隔離性)

1、在多用戶的時候使用孤立性級別是很重要的,這樣可以保證這些事務(wù)互不影響,保證數(shù)據(jù)庫性能不受到影響。

2、mysql中提供的孤立級別有以下四種:

 SQL標準定義了4類隔離級別,包括了一些具體規(guī)則,用來限定事務(wù)內(nèi)外的哪些改變是可見的,哪些是不可見的。低級別的隔離級一般支持更高的并發(fā)處理,并擁有更低的系統(tǒng)開銷。
Read Uncommitted(讀取未提交內(nèi)容)

      在該隔離級別,所有事務(wù)都可以看到其他未提交事務(wù)的執(zhí)行結(jié)果。本隔離級別很少用于實際應(yīng)用,因為它的性能也不比其他級別好多少。讀取未提交的數(shù)據(jù),也被稱之為臟讀(Dirty Read)。
Read Committed(讀取提交內(nèi)容)

      這是大多數(shù)數(shù)據(jù)庫系統(tǒng)的默認隔離級別(但不是MySQL默認的)。它滿足了隔離的簡單定義:一個事務(wù)只能看見已經(jīng)提交事務(wù)所做的改變。這種隔離級別 也支持所謂的不可重復(fù)讀(Nonrepeatable Read),因為同一事務(wù)的其他實例在該實例處理其間可能會有新的commit,所以同一select可能返回不同結(jié)果。
Repeatable Read(可重讀)

      這是MySQL的默認事務(wù)隔離級別,它確保同一事務(wù)的多個實例在并發(fā)讀取數(shù)據(jù)時,會看到同樣的數(shù)據(jù)行。不過理論上,這會導(dǎo)致另一個棘手的問題:幻讀 (Phantom Read)。簡單的說,幻讀指當用戶讀取某一范圍的數(shù)據(jù)行時,另一個事務(wù)又在該范圍內(nèi)插入了新行,當用戶再讀取該范圍的數(shù)據(jù)行時,會發(fā)現(xiàn)有新的“幻影” 行。InnoDB和Falcon存儲引擎通過多版本并發(fā)控制(MVCC,Multiversion Concurrency Control)機制解決了該問題。

Serializable(可串行化) 
      這是高的隔離級別,它通過強制事務(wù)排序,使之不可能相互沖突,從而解決幻讀問題。簡言之,它是在每個讀的數(shù)據(jù)行上加上共享鎖。在這個級別,可能導(dǎo)致大量的超時現(xiàn)象和鎖競爭。

         這四種隔離級別采取不同的鎖類型來實現(xiàn),若讀取的是同一個數(shù)據(jù)的話,就容易發(fā)生問題。例如:

        臟讀(Drity Read):某個事務(wù)已更新一份數(shù)據(jù),另一個事務(wù)在此時讀取了同一份數(shù)據(jù),由于某些原因,前一個RollBack了操作,則后一個事務(wù)所讀取的數(shù)據(jù)就會是不正確的。

         不可重復(fù)讀(Non-repeatable read):在一個事務(wù)的兩次查詢之中數(shù)據(jù)不一致,這可能是兩次查詢過程中間插入了一個事務(wù)更新的原有的數(shù)據(jù)。

        幻讀(Phantom Read):在一個事務(wù)的兩次查詢中數(shù)據(jù)筆數(shù)不一致,例如有一個事務(wù)查詢了幾列(Row)數(shù)據(jù),而另一個事務(wù)卻在此時插入了新的幾列數(shù)據(jù),先前的事務(wù)在接下來的查詢中,就會發(fā)現(xiàn)有幾列數(shù)據(jù)是它先前所沒有的。

        在MySQL中,實現(xiàn)了這四種隔離級別,分別有可能產(chǎn)生問題如下所示:

MySQL中事務(wù)是什么意思

3、事務(wù)孤立級的查看和修改: 

查看:select @@tx_isolation;

修改:set global transaction isolation level 設(shè)置的孤立級別;

七、偽事務(wù)(鎖定)

1、在MySQL中根據(jù)不同的需求,提供了很多存儲引擎,但是有的存儲引擎不支持事務(wù),對于這種情況,可以使用表鎖定來代替事務(wù)。

2、對于不支持事務(wù)的存儲引擎MYISAM類型數(shù)據(jù)表,當用戶插入,修改,刪除時,這些操作都會立即保存到磁盤中,當多用戶同時操作某個表時,可以使用表鎖定來避免同一時間有多個用戶對數(shù)據(jù)庫中指定表進行操作,這樣可以避免在用戶操作數(shù)據(jù)表過程中受到干擾。只有但用戶釋放表的操作鎖定后,其他 用戶才可以訪問這些修改的數(shù)據(jù)表。

這里的鎖和Java多線程中鎖的作用一樣,個人覺的可以這樣理解。

3、對指定表進行鎖操作的過程:

 (1)lock table table-name lock type ;  //locktype 有read 和write 兩種

對多個表進行加鎖:

 lock table table-name1 lock type, table -name2 lock type ,table -name3 lock type;

(2)在指定的表中進行相應(yīng)的操作

(3)當用戶完成對鎖定數(shù)據(jù)表的操作后,進行解鎖。

unlock tables ; //釋放了所有加鎖表的鎖。

以上是“MySQL中事務(wù)是什么意思”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

標題名稱:MySQL中事務(wù)是什么意思-創(chuàng)新互聯(lián)
當前網(wǎng)址:http://muchs.cn/article30/diecpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)網(wǎng)站收錄、ChatGPT云服務(wù)器、網(wǎng)頁設(shè)計公司網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)