程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql 詳解隔離級別操作進程(cmd)

mysql 詳解隔離級別操作進程(cmd)

編輯:MySQL綜合教程

mysql 詳解隔離級別操作進程(cmd)。本站提示廣大學習愛好者:(mysql 詳解隔離級別操作進程(cmd))文章只能為提供參考,不一定能成為您想要的結果。以下是mysql 詳解隔離級別操作進程(cmd)正文


讀未提交示例操作進程-Read uncommitted

1、翻開兩個MySql的命令提示行,均進入相反數據庫,並反省以後表內容為相反數據如下:

2、在A、B兩端執行select @@tx_isolation;反省以後默許的隔離級別別,可以發現都是

Repeatable Read –可反復讀-(在以後事務內,反復讀取第一次讀取過的數據就叫可反復讀。)

3、修正A端的隔離級別為readuncommitted –讀未提交。意思是可以讀取他人沒有提交的數據。

set transactionisolation level read uncommitted;

在綠色的MySql5.5上請執行:

Set sessiontransaction isolation level read uncommitted;

   然後再檢查能否曾經發作改動:

4、在A、B兩端都開啟事務

starttransaction;

5、在B端修正一行數據如:

update stud setname='Jhon' where id=1;

   其後在A端執行查詢:select * from stud;

6、此時B端再次執行回滾操作

Rollback;

   再在A端停止查詢,後果發現數據又回到了之前的數據。這就是髒讀:

7、關於B端寫入的新數據,假如沒有提交A端也一樣能查詢到,這叫幻讀。

 讀已提交操作進程:-read COMMITTED

1、 反省A、B兩端能否分歧:

2、修正A端(左)的隔離級別為readcommitted;

set transactionisolation level read committed;

   在A端開啟事務:

   starttransaction;

   在B端開啟事務

3、在A端停止查詢:

Select * fromstud;

在B端修正一行記載並提交

Update stud setname='itcast' where id=1;

再回到A端停止查詢,發如今同一個事務內,兩次查詢的後果不一樣:

 可反復讀示例Repeatable Read

1、檢查A端的隔離級別能否為Repeatableread級別:

Select@@tx_isolation;

2、先在A端在開啟的事務內停止查詢。

然後在B端修正數據庫的內容。

最後再在A端的同一事務內停止查詢,發現後果分歧。

 Serializable是最初級的隔離級別

1、在A端設置隔離級別為Serializable

set transactionisolation level serializable;

在A端開啟一個事務-並對stud表停止查詢。

在B端開啟一個事務,並寫入一行記載。此時發現B的代碼並沒有執行,由於它在等A提交之後它才執行。

相似於線程同步的概念

 這四種隔離級別采取不同的鎖類型來完成,若讀取的是同一個數據的話,就容易發作問題。例如:

髒讀(Drity Read):某個事務已更新一份數據,另一個事務在此時讀取了同一份數據,由於某些緣由,前一個RollBack(回滾)了操作,則後一個事務所讀取的數據就會是不正確的。

不可反復讀(Non-repeatable read):在一個事務的兩次查詢之中數據不分歧,這能夠是兩次查詢進程兩頭拔出了一個事務更新的原有的數據。

幻讀(Phantom Read):在一個事務的兩次查詢中數據筆數不分歧,例如有一個事務查詢了幾列(Row)數據,而另一個事務卻在此時拔出了新的幾列數據,先前的事務在接上去的查詢中,就會發現有幾列數據是它先前所沒有的

 感激閱讀,希望能協助到大家,謝謝大家對本站的支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved