亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL RR隔離級別的更新沖突策略

發布時間:2020-08-13 11:20:43 來源:ITPUB博客 閱讀:181 作者:jeanron100 欄目:MySQL數據庫

  對于事務的隔離級別,MySQL中默認是RR, Oracle中默認是RC,兩個事務隔離級別存在著很大的差別,而換句話說,就算是RR的事務隔離級別級別,同是關系型數據庫MySQL,SQLServer,postgreSQL也會有一些差別。所以隔離級別的部分還是值得花一些時間來總結一下。

   之前看到過丁奇大師的一篇文章,是分析InnoDB的在隔離級別RR下的一個“詭異”現象。讀來受益匪淺,丁大師不光明理而且還能改動代碼解決問題,實在佩服,我在自己的環境中也做了一些簡單的測試和分析。

   首先是初始化基礎數據,我們開啟兩個窗口,創建一個測試表,插入兩條記錄。


create table t (id int not null, name varchar(10) ) engine=innodb ;
insert into t values(1,'name1'),(3,'name3');
   整個過程雖然是兩個窗口,但是操作是一個串行的過程。

首先看下RR本身的現象,會話1開啟一個事務,會話2插入一條記錄,在會話1中查詢應該還是2條數據。

#會話 1
> begin;
Query OK, 0 rows affected (0.00 sec)

開啟事務后,查詢當前的數據情況。

> select *from t;
+----+-------+
| id | name  |
+----+-------+
|  1 | name1 |
|  3 | name3 |
+----+-------+
2 rows in set (0.00 sec)

會話 2:

會話2插入一條記錄,默認提交。
> insert into t values(4,'name4');
Query OK, 1 row affected (0.00 sec)


這個過程中,如果在會話1中查看數據,應該還是2條,這也是RR本身對的含義。
會話 1:
> select *from t;
+----+-------+
| id | name  |
+----+-------+
|  1 | name1 |
|  3 | name3 |
+----+-------+
2 rows in set (0.00 sec)

我們繼續做一個update, id=4的記錄是剛剛在會話2中插入的,在此處變更,從結果來看還是產生了一行數據的變化,這是一個“詭異”的地方。

> Update t set name= 'name_test' where id = 4;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
而接下來的地方就是問題的關鍵了,我們再次查詢就輸出了3行記錄,原來id=4,name='name4'的記錄在會話1里面被修改成了id=4,name='name_test'


> select *from t;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | name1     |
|  3 | name3     |
|  4 | name_test |
+----+-----------+
3 rows in set (0.00 sec)

這個時候如果查看會話2的數據情況,得到的結果還是相對合理的。
會話 2:
mysql> select *from t;
+----+-------+
| id | name  |
+----+-------+
|  1 | name1 |
|  3 | name3 |
|  4 | name4 |
+----+-------+
3 rows in set (0.00 sec)

   所以這就是更新沖突的策略了,目前的MySQL在RR隔離級別下的實現是這樣。而按照我們預期的要求,應該在會話1的事務內是對會話2的變更不可見的。

   這一點上,在5.7中的結果也是如此,在5.1的版本中的update的輸出效果會有一些差別。

  而關于這部分的代碼及修改可以參見

http://dinglin.iteye.com/blog/804655


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泽州县| 临沂市| 海城市| 金华市| 新平| 兰考县| 天津市| 台北市| 漳平市| 金塔县| 齐齐哈尔市| 道真| 兴和县| 虹口区| 洞口县| 美姑县| 荔波县| 册亨县| 西华县| 资兴市| 莲花县| 庆元县| 曲沃县| 灯塔市| 凉城县| 乡城县| 蒙阴县| 灵武市| 武陟县| 永和县| 常德市| 牙克石市| 静宁县| 恩施市| 民乐县| 绥棱县| 同仁县| 奉新县| 镇巴县| 望都县| 宿州市|