十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
本篇內(nèi)容介紹了“MySQL數(shù)據(jù)庫(kù)事物隔離四種級(jí)別是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
十多年的長(zhǎng)寧網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整長(zhǎng)寧建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“長(zhǎng)寧網(wǎng)站設(shè)計(jì)”,“長(zhǎng)寧網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
數(shù)據(jù)庫(kù)事物隔離級(jí)別有四種,按照隔離性,由低到高依次是:
Read Uncommitted
Read Committed
Repeatable Read
Serializable
按照并發(fā)性則順序相反。
√: 可能出現(xiàn) ×: 不會(huì)出現(xiàn)
臟讀 | 不可重復(fù)讀 | 幻讀 | |
---|---|---|---|
Read uncommitted(未提交讀) | √ | √ | √ |
Read committed(已提交讀) | × | √ | √ |
Repeatable read(可重復(fù)讀) | × | × | √ |
Serializable(可串行化) | × | × | × |
讀未提交,即在SQL查詢中,讀取了未提交的數(shù)據(jù)。在mysql中,默認(rèn)的事物級(jí)別是Repeatable read;默認(rèn)自動(dòng)提交模式是打開(kāi)的,現(xiàn)做如下修改如下所示,
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec)
mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF |
+---------------+-------+
1 row in set (0.01 sec)
mysql> show variables like 'tx_isolation';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tx_isolation | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Query OK, 0 rows affected (0.00 sec)
當(dāng)前打開(kāi)了兩個(gè)session,在第一個(gè),往表test中插入了一行數(shù)據(jù),但是還沒(méi)有提交,此時(shí)通過(guò)第二個(gè)session可以查詢到該條數(shù)據(jù)。
且當(dāng)?shù)谝粋€(gè)session中的事物rollback之后,第二個(gè)session又查詢不到新插入的數(shù)據(jù)‘3’
讀提交,修改事物幾倍為Read Committed
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
Query OK, 0 rows affected (0.00 sec)
此時(shí),在session0中插入了一條數(shù)據(jù)且未commit,在session1中無(wú)法查詢到
等session0在commit之后,session1可以正常的查詢到數(shù)據(jù)
可重復(fù)讀,此時(shí)修改事物級(jí)別為可重復(fù)讀
mysql> SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Query OK, 0 rows affected (0.00 sec)
此時(shí),test表中存在兩筆數(shù)據(jù):2和4,如下所示
mysql> select * from test where col1 <'5';
+------+
| col1 |
+------+
| 2 |
| 4 |
+------+
2 rows in set (0.00 sec)
此時(shí)步驟如下:1.在session0中begin一個(gè)事物;2.在session1中插入一條數(shù)據(jù)(5),并commit; 3.在session0中查詢,發(fā)現(xiàn)查詢不到在session1中插入的數(shù)據(jù)
接下來(lái),再做如下操作:1.在session0中commit; 2.在session0中再做查詢操作,發(fā)現(xiàn)之前在session1中insert的5又可以查詢到
可串行話,是最高的隔離級(jí)別,即在讀取的每一行數(shù)據(jù)上會(huì)加鎖,事物順序執(zhí)行。所以會(huì)出現(xiàn)鎖超時(shí)等問(wèn)題,在實(shí)際業(yè)務(wù)中很少使用。
“mysql數(shù)據(jù)庫(kù)事物隔離四種級(jí)別是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!