小編給大家分享一下MySQL中事務(wù)是什么意思,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
我們提供的服務(wù)有:成都網(wǎng)站制作、網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、白城ssl等。為近1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的白城網(wǎng)站制作公司一、事務(wù)的概念
事務(wù)由單獨(dú)單元的一個或多個SQL語句組成,在這個單元中,每個MySQL語句是相互依賴的。而整個單獨(dú)單元作為一個不可分割的整體,如果單元中某條SQL語句一旦執(zhí)行失敗或產(chǎn)生錯誤,整個單元將會回滾。所有受到影響的數(shù)據(jù)將返回到事物開始以前的狀態(tài);如果單元中的所有SQL語句均執(zhí)行成功,則事物被順利執(zhí)行。
二、MySQL 中的存儲引擎以及支持事務(wù),和不支持事務(wù)的存儲引擎
1、存儲引擎的概念:在mysql中的數(shù)據(jù)用各種不同的技術(shù)存儲在文件(或內(nèi)存)中。
這些技術(shù)中的每一種技術(shù)都使用不同的存儲機(jī)制,索引 技巧,并且最終提供廣泛的不同的功能和能力??梢酝ㄟ^選擇不同的技術(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語句組成,這些語句被認(rèn)為是一個不可分割的單元。
2、一致性:對于數(shù)據(jù)庫的修改是一致的,即多個用戶查的的數(shù)據(jù)是一樣的。一致性主要由mysql的日志機(jī)制處理,他記錄數(shù)據(jù)的變化,為事務(wù)恢復(fù)提供跟蹤記錄。
3、隔離性(孤立性):每個事務(wù)都有自己的空間,和其他發(fā)生在系統(tǒng)中的事務(wù)隔離開來,而且事務(wù)的結(jié)果只在他完全被執(zhí)行時才能看到
4、持久性:但提交了這個事務(wù)之后對數(shù)據(jù)的修改更新就是永久的。當(dāng)一個事務(wù)完成,數(shù)據(jù)庫的日志已經(jīng)被更新時,持久性即可發(fā)揮其特有的 功效,在mysql中,如果系統(tǒng)崩潰或者數(shù)據(jù)存儲介質(zhì)被破壞,通過日志,系統(tǒng)能夠恢復(fù)在重啟前進(jìn)行的最后一次成功更新,可以反應(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、對表類型進(jìn)行修改
alert table table-name type =innodb/bdb;
3、事務(wù)的整個過程
use databases; //使用某個數(shù)據(jù)庫
start transaction ; //開始事務(wù) 、這里也可以使用 begin 、 beginwork
insert into stu1 values('', ); //進(jìn)行相關(guān)的操作
commit //提交事物
rollback //撤銷事務(wù)(事務(wù)回滾)
五:mysql行為
1、我們在使用mysql是如果關(guān)閉之后,打開在查詢的話就會發(fā)現(xiàn),哪些數(shù)據(jù)已經(jīng)保存了,但是我們知道,在這過程中沒有進(jìn)行顯示或隱式提交,問什么會這樣那?因?yàn)槲覀冊趍ysql中設(shè)置了自動提交,但我們也可以改為手動提交。
2、 set autocommit =0; //關(guān)閉自動提交
3、 set autocommit =1; //開啟自動提交
六、事務(wù)的孤立性(隔離性)
1、在多用戶的時候使用孤立性級別是很重要的,這樣可以保證這些事務(wù)互不影響,保證數(shù)據(jù)庫性能不受到影響。
2、mysql中提供的孤立級別有以下四種:
SQL標(biāo)準(zhǔn)定義了4類隔離級別,包括了一些具體規(guī)則,用來限定事務(wù)內(nèi)外的哪些改變是可見的,哪些是不可見的。低級別的隔離級一般支持更高的并發(fā)處理,并擁有更低的系統(tǒng)開銷。
Read Uncommitted(讀取未提交內(nèi)容)
在該隔離級別,所有事務(wù)都可以看到其他未提交事務(wù)的執(zhí)行結(jié)果。本隔離級別很少用于實(shí)際應(yīng)用,因?yàn)樗男阅芤膊槐绕渌墑e好多少。讀取未提交的數(shù)據(jù),也被稱之為臟讀(Dirty Read)。
Read Committed(讀取提交內(nèi)容)
這是大多數(shù)數(shù)據(jù)庫系統(tǒng)的默認(rèn)隔離級別(但不是MySQL默認(rèn)的)。它滿足了隔離的簡單定義:一個事務(wù)只能看見已經(jīng)提交事務(wù)所做的改變。這種隔離級別 也支持所謂的不可重復(fù)讀(Nonrepeatable Read),因?yàn)橥皇聞?wù)的其他實(shí)例在該實(shí)例處理其間可能會有新的commit,所以同一select可能返回不同結(jié)果。
Repeatable Read(可重讀)
這是MySQL的默認(rèn)事務(wù)隔離級別,它確保同一事務(wù)的多個實(shí)例在并發(fā)讀取數(shù)據(jù)時,會看到同樣的數(shù)據(jù)行。不過理論上,這會導(dǎo)致另一個棘手的問題:幻讀 (Phantom Read)。簡單的說,幻讀指當(dāng)用戶讀取某一范圍的數(shù)據(jù)行時,另一個事務(wù)又在該范圍內(nèi)插入了新行,當(dāng)用戶再讀取該范圍的數(shù)據(jù)行時,會發(fā)現(xiàn)有新的“幻影” 行。InnoDB和Falcon存儲引擎通過多版本并發(fā)控制(MVCC,Multiversion Concurrency Control)機(jī)制解決了該問題。
Serializable(可串行化)
這是高的隔離級別,它通過強(qiáng)制事務(wù)排序,使之不可能相互沖突,從而解決幻讀問題。簡言之,它是在每個讀的數(shù)據(jù)行上加上共享鎖。在這個級別,可能導(dǎo)致大量的超時現(xiàn)象和鎖競爭。
這四種隔離級別采取不同的鎖類型來實(shí)現(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中,實(shí)現(xiàn)了這四種隔離級別,分別有可能產(chǎn)生問題如下所示:
3、事務(wù)孤立級的查看和修改:
查看:select @@tx_isolation;
修改:set global transaction isolation level 設(shè)置的孤立級別;
七、偽事務(wù)(鎖定)
1、在MySQL中根據(jù)不同的需求,提供了很多存儲引擎,但是有的存儲引擎不支持事務(wù),對于這種情況,可以使用表鎖定來代替事務(wù)。
2、對于不支持事務(wù)的存儲引擎MYISAM類型數(shù)據(jù)表,當(dāng)用戶插入,修改,刪除時,這些操作都會立即保存到磁盤中,當(dāng)多用戶同時操作某個表時,可以使用表鎖定來避免同一時間有多個用戶對數(shù)據(jù)庫中指定表進(jìn)行操作,這樣可以避免在用戶操作數(shù)據(jù)表過程中受到干擾。只有但用戶釋放表的操作鎖定后,其他 用戶才可以訪問這些修改的數(shù)據(jù)表。
這里的鎖和Java多線程中鎖的作用一樣,個人覺的可以這樣理解。
3、對指定表進(jìn)行鎖操作的過程:
(1)lock table table-name lock type ; //locktype 有read 和write 兩種
對多個表進(jìn)行加鎖:
lock table table-name1 lock type, table -name2 lock type ,table -name3 lock type;
(2)在指定的表中進(jìn)行相應(yīng)的操作
(3)當(dāng)用戶完成對鎖定數(shù)據(jù)表的操作后,進(jìn)行解鎖。
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ù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
標(biāo)題名稱:MySQL中事務(wù)是什么意思-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://jinyejixie.com/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)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容