標籤:autocommit
敬愛的孫先生:
我在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操作還會自動認可嗎?
答案:不會自動認可
[email protected] [sy]> select @@tx_isolation;
+----------------+
| @@tx_isolation |
+----------------+
| READ-COMMITTED |
+----------------+
1 row in set (0.00 sec)
[email protected] [sy]> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
[email protected] [sy]> select * from t3;
+------+------+
| id | name |
+------+------+
| 1 | sy |
| 2 | ll |
+------+------+
2 rows in set (0.00 sec)
[email protected] [sy]> insert into t3 values(3,‘aa‘);
Query OK, 1 row affected (0.00 sec)
另外一個session
[email protected] [sy]> select * from t3;
+------+------+
| id | name |
+------+------+
| 1 | sy |
| 2 | ll |
+------+------+
2 rows in set (0.00 sec)
MySQL學習中的的疑問