mysql中事務的四大特性


 --- 事務(Transaction):把多條DML語句捆綁在一起,要么同時執行成功要么同時執行失敗

事務的執行sql:

      commit  --提交

      rollback  --回滾

      savepoint --保存點,便於回滾到某一位置,直接回滾是從頭開始

事務的實現邏輯:

  1、開啟事務機制

  2、執行DML語句

  3、提交事務或回滾(事務提交后將會永久修改硬盤文件內的數據 -- 結束 /// 事務回滾后不會修改硬盤文件上的數據 -- 結束)

例:微信轉賬,好友a給好友b轉賬100元

實際就是執行兩條update的語句
1、update t_user set 賬戶余額 = 賬戶余額 - 1000 where user = a;
2、update t_user set 賬戶余額 = 賬戶余額 + 1000 where user = b;
以上兩條DML語句就是一個事務,開啟事務機制,兩條語句開始執行,要么同時成功要么同時失敗。

事務的四大特性:ACID

A:原子性 --事務是最小的工作單元,不可再分

C:一致性 --所有執行的DML語句必須同時失敗或成功

I: 隔離性 --事務和事務之間必須有隔離

D:持久性 --最終數據必須持久化到硬盤文件中,事務才算成功結束

mysql當中事務是自動提交的

演示:

 一條insert語句執行后,數據會自動寫入到表中來

關閉自動提交,演示事務實現邏輯的完整過程。

mysql> start transaction;               --關閉事務自動提交機制
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_user(username)values('test');  --插入數據
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_user;      --查看表內數據
+----+----------+
| id | username |
+----+----------+
|  1 | ls       |
|  2 | sz       |
|  9 | yanshi   |
| 10 | test     |
+----+----------+
4 rows in set (0.00 sec)

mysql> rollback;           --回滾
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t_user;   --再次查看表內數據,此時表內id=10的數據已經消失
+----+----------+
| id | username |
+----+----------+
|  1 | ls       |
|  2 | sz       |
|  9 | yanshi   |
+----+----------+
3 rows in set (0.00 sec)

幾條語句下來,就驗證了事務的實現邏輯,如果沒有commit動作,事務結束后,是不會修改到硬盤內的數據

事務的隔離性也分為四大隔離等級

第一級別:讀取未提交數據(read uncommitted)

 釋:a關閉自動提交后,處於第一級別的隔離性,在執行DML語句后,未做commit動作,b查看這張表是能查看到未提交前a所執行的DML語句

缺點:存在臟數據,數據及其不穩定

第二級別:讀取已提交數據(read committed)

釋:a關閉自動提交后,處於第二級別的隔離性,在執行DML語句后,做完commit動作,b看到的是commit后的所有表內數據

缺點:不能重復讀表內原始的數據,只能讀commit后變更的數據

第三級別:可重復讀(repeatable read)

釋:commit后的數據不能讀取到,只能讀事務開啟時的數據

第四級別:序列化讀

釋:排隊讀取,當a在讀時,b就得一直等,直到a停止讀取后,b才能讀取

缺點:效率低,所有的事務都得進行排隊

mysql當中默認的隔離級別是第三級別,而oracle中默認的隔離級別是第二級別

mysql> select @@global.tx_isolation;  --查看mysql的隔離級別
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| REPEATABLE-READ       |
+-----------------------+
1 row in set, 1 warning (0.00 sec)

 

有啥個人誤解,望評論區指出,謝謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM