測試你對MySQL事務與隔離等級的理解的一道題,mysql事務

來源:互聯網
上載者:User

測試你對MySQL事務與隔離等級的理解的一道題,mysql事務

之前寫過一篇《MySQL InnoDB 四種交易隔離等級 與髒讀、可重複讀、幻讀》

http://blog.csdn.net/seven_3306/article/details/27085275

這是我自己琢磨出來的一道關於MySQL事務和隔離等級的題目,請填寫問號部分的內容:

如果你能正確的說明出如下結果,那麼你應該對MySQL事物和隔離等級有一定的認識了。


如果不是,那麼可能你並不理解MySQL的事務和隔離等級。

另外這道題可以幫你理解為什麼有的時候會出現這個問題:
ERROR 1205 (HY000): Lock wait timeout exceeded;    try restarting transaction


理解了這個錯誤的原因,就可以解決這個問題了。



MySQL 資料庫有表 
create table t(a int)engine=innodb,charset=utf8;
insert into t(a)values(0);
MySQL在兩個session中按照如下順序執行如下命令:
session  A session B
   
set session transaction  isolation level read committed;  
SET AUTOCOMMIT=0; set session transaction isolation level read committed;
  SET AUTOCOMMIT=0;
SELECT a FROM t;  
結果:0  
   
  SELECT a FROM t;
  結果:0
   
   
UPDATE t SET a = a+1;  
SELECT a from t;  
結果:?  
   
   
  SELECT a from t;
  結果:?
   
  UPDATE t set a=a+5;

結果:
   
   
   
COMMIT;(ROLLBACK)  
  SELECT a FROM t;
  結果:? (如果session  A被rollback,則為?)
   
  COMMIT
   
  SELECT a FROM t;
  結果:?(如果session  A被rollback,則為?)
SELECT a FROM t;  
結果:?(如果session A被rollback,則為?)  




結果是:

session  A session B
   
set session transaction  isolation level read committed;  
SET AUTOCOMMIT=0; set session transaction isolation level read committed;
  SET AUTOCOMMIT=0;
SELECT a FROM t;  
結果:0  
   
  SELECT a FROM t;
  結果:0
   
   
UPDATE t SET a = a+1;  
SELECT a from t;  
結果:1  
   
   
  SELECT a from t;
  結果:0
   
  UPDATE t set a=a+5;
  結果:被阻塞住了,再等待session  A的事務提交,也就是等待session A釋放鎖
    一、如果session A超過一定時間沒有釋放鎖(提交事務),
    則session B因鎖等待逾時:ERROR 1205 (HY000): Lock wait timeout exceeded; 
    try restarting transaction
    2、如果session A在session B鎖等待逾時前提交了事務,則session B執行update a =a+1;
    Innodb鎖等待時間為:show variables like '%innodb_lock_wait_timeout%';(Global,  Session層級)
    3、如果session A在session B鎖等待逾時前執行了rollback,則session B執行update a=a+1;
   
   
   
COMMIT;(ROLLBACK)  
  SELECT a FROM t;
  結果:(一、報錯。 二、6  三、如果session A被rollback,則為5)
   
  COMMIT
   
  SELECT a FROM t;
  結果:(一、報錯。 二、6  三、如果session A被rollback,則為5
SELECT a FROM t;  
結果一、如果session B鎖等待逾時,則為1 
    二、如果session B未逾時,且session A提交事務則為6 
     三、如果session A被rollback,則為5)
 



思考,換成其它交易隔離等級,那麼結果又是什嗎?


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.