敬愛的孫先生:
我在MySQL的學習中遇到的問題整理如下:
問題0:
用start transaction開啓一個事務時需要設置autocommit=0嗎?
答:不需要。autocommit=0 意思是不提交dml操作,其實就是開啓事務。
問題1:
Repeatable read和Read Committed的區別是什麼?
如何運用?
回答:rc是不可重複讀 rr是可重複讀 ;
rc多次執行一個sql,結果會不一樣,rr會在結果的範圍內有幻影行出現
RC解決了事務的髒讀,髒讀是讀取到了未提交的髒數據。
RR解決了事務的不可重複讀,不可重複讀是第一次讀過的記錄被更改,再也讀取不到。
RR理論上是沒解決幻讀的,innodb導入MVCC機制,解決了幻讀問題。
所以,mysql rr的事務隔離級別才能作爲默認事務隔離級別
問題2:
autocommit和Repeatable Committed的效果是一樣的嗎?
如何運用這兩個變量?
問題3:
我在MySQL中set autocommit=0後,如果我的隔離級別是Read Committed
那我所做的DML操作還會自動提交嗎?
答案:不會自動提交
sunyu@localhost [sy]> select @@tx_isolation;
+----------------+
| @@tx_isolation |
+----------------+
| READ-COMMITTED |
+----------------+
1 row in set (0.00 sec)
sunyu@localhost [sy]> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
sunyu@localhost [sy]> select * from t3;
+------+------+
| id | name |
+------+------+
| 1 | sy |
| 2 | ll |
+------+------+
2 rows in set (0.00 sec)
sunyu@localhost [sy]> insert into t3 values(3,'aa');
Query OK, 1 row affected (0.00 sec)
另外一個session
sunyu@localhost [sy]> select * from t3;
+------+------+
| id | name |
+------+------+
| 1 | sy |
| 2 | ll |
+------+------+
2 rows in set (0.00 sec)