這篇文章主要為大家展示了“Repeatable-Read及Read-Committed有哪些區(qū)別”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Repeatable-Read及Read-Committed有哪些區(qū)別”這篇文章吧。
廣安網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、成都響應式網(wǎng)站建設公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選成都創(chuàng)新互聯(lián)。
MySQL 默認提供的是 Repeatable-Read 可重復讀,更適用于oltp
Read-Committed 不可重復讀 也可以叫做提交讀
在MySQL中基本有這兩種事務隔離級別的設置,默認的RR(Repeatable-Read)和實際中常見的RC(Read-Committed)。兩者區(qū)別是什么,怎么正確理解,用幾個SQL語句就能說明白,就用簡單的實驗來說明白。
我們開始吧。
首先創(chuàng)建一個測試表test,插入一些數(shù)據(jù)。
create table test( id int primary key,name varchar(30),memo varchar(30));
insert into test values(1,'name1','aaaa'),(2,'name2','aaaa'),(3,'name3','aaaa'),(4,'name4','aaaa'),(5,'name5','aaaa'); 很多情況下,我們會把隔離級別從默認的RR修改為RC,這也是其它很多數(shù)據(jù)庫默認的事務隔離級別。
我們打開兩個窗口,來對比關聯(lián)測試。
RC模式下的測試
1
窗口1
>show variables like 'tx_isolation';
+---------------+----------------+
| Variable_name | Value |
+---------------+----------------+
| tx_isolation | READ-COMMITTED |
+---------------+----------------+
1 row in set (0.01 sec)
>begin; --開啟事務
>select *from test; --查看數(shù)據(jù)
+----+-------+------+
| id | name | memo |
+----+-------+------+
| 1 | name1 | aaaa |
| 2 | name2 | aaaa |
| 3 | name3 | aaaa |
| 4 | name4 | aaaa |
| 5 | name5 | aaaa |
+----+-------+------+
5 rows in set (0.00 sec)
2
窗口2
begin; --開啟事務
>update test set name='aaaaa' where id=2; --修改一條記錄
Query OK, 1 row affected (0.06 sec)
Rows matched: 1 Changed: 1 Warnings: 0
>commit; --提交事務
Query OK, 0 rows affected (0.01 sec)
1
窗口1
>select *from test; --查看窗口1中的數(shù)據(jù),就會發(fā)現(xiàn)原來窗口的數(shù)據(jù)發(fā)生了變化,這是不可重復讀的一個典型例子。
+----+-------+------+
| id | name | memo |
+----+-------+------+
| 1 | name1 | aaaa |
| 2 | aaaaa | aaaa |
| 3 | name3 | aaaa |
| 4 | name4 | aaaa |
| 5 | name5 | aaaa |
+----+-------+------+
5 rows in set (0.00 sec)
RR模式下的測試
再來看看RR這個隔離級別,其實有了上面的測試,就相對有底了。這是MySQL默認的隔離級別,會出現(xiàn)幻讀的情況。
1
窗口1
首先修改隔離級別從RC到RR
>set global transaction isolation level repeatable read;
Query OK, 0 rows affected (0.00 sec)
?查看事務隔離級別。
>show variables like 'tx_isolation';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tx_isolation | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)
>begin; --開啟事務
>select *from test; --查看表test的數(shù)據(jù)。
+----+-------+------+
| id | name | memo |
+----+-------+------+
| 1 | name1 | aaaa |
| 2 | aaaaa | aaaa |
| 3 | name3 | aaaa |
| 4 | name4 | aaaa |
| 5 | name5 | aaaa |
+----+-------+------+
5 rows in set (0.00 sec)
2
窗口2
>begin; --開啟事務
>update test set name='RR_test'; --修改表test的數(shù)據(jù),所有記錄都發(fā)生變化。
Query OK, 5 rows affected (0.01 sec)
Rows matched: 5 Changed: 5 Warnings: 0
>commit; --提交事務
Query OK, 0 rows affected (0.00 sec)
1
窗口1
>select *from test; --在RR模式下,窗口1中的事務因為還沒有提交,看到的還是原來的數(shù)據(jù)。
+----+-------+------+
| id | name | memo |
+----+-------+------+
| 1 | name1 | aaaa |
| 2 | aaaaa | aaaa |
| 3 | name3 | aaaa |
| 4 | name4 | aaaa |
| 5 | name5 | aaaa |
+----+-------+------+
5 rows in set (0.00 sec)
>commit; --我們提交窗口1的事務
Query OK, 0 rows affected (0.00 sec)
>select *from test; --再次查看數(shù)據(jù)就發(fā)生了變化,實際上窗口1中沒有任何的DMl操作。
+----+---------+------+
| id | name | memo |
+----+---------+------+
| 1 | RR_test | aaaa |
| 2 | RR_test | aaaa |
| 3 | RR_test | aaaa |
| 4 | RR_test | aaaa |
| 5 | RR_test | aaaa |
+----+---------+------+
5 rows in set (0.00 sec)
以上是“Repeatable-Read及Read-Committed有哪些區(qū)別”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站標題:Repeatable-Read及Read-Committed有哪些區(qū)別
轉載來源:http://chinadenli.net/article0/ppidoo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、外貿(mào)建站、響應式網(wǎng)站、品牌網(wǎng)站設計、網(wǎng)站策劃、網(wǎng)站維護
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)