【數據庫】事務隔離級別

事務(ACID)的特性:

  1. 原子性:一系列操作,要麼一起成功,要麼全部失敗(單線程批量操作)
  2. 一致性:多線程同時修改同一數據時,最終結果和操作的動作需要保持一致(多線程操作)
  3. 隔離性:事務和事務之間的關係
  4. 持久性:事務提交之後數據庫的修改是永久性的

事務的操作:

  1. 開啓(start transaction):開啓事務
  2. 關閉事務兩種方式:
  • 回滾(rollback):事務執行失敗,所執行的操作
  • 提交(commit):事務操作無任何錯誤,將數據持久化的最後一步操作

事務操作和存儲過程(非事務性):

  1. 存儲過程所產生的結果無法進行回滾
  2. 事務操作一定程度上,能夠保證數據的安全性

事務的隔離級別

  1. serializable:(創建一個事務,另一個事務就不能開啓,可以同時避免髒讀、幻讀、不可重複讀)
  2. read-commited(Oracle默認的隔離級別):(讀取事務提交後的結果)
  3. read-uncommited(風險最大,效率最高):(可讀取事務未提交的結果)
  4. repeatable-read[default]:(同一條件查詢返回的結果永遠是一致的,無論事務是否提交)
事務隔離級別 髒讀 不可重複讀 幻讀
serializable N N N
read-uncommitted Y Y Y
read-committed N Y Y
repeatable-read N N Y

事務隔離性操作

  1. 修改當前命令行下的事務隔離性
MariaDB [db_job]> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)

MariaDB [db_job]> set tx_isolation='serializable';
Query OK, 0 rows affected (0.00 sec)

MariaDB [db_job]> select @@tx_isolation;
+----------------+
| @@tx_isolation |
+----------------+
| SERIALIZABLE   |
+----------------+
1 row in set (0.00 sec)

  1. 修改全局事務隔離性
MariaDB [db_job]> set global transaction isolation level serializable;
Query OK, 0 rows affected (0.00 sec)

MariaDB [db_job]> select @@tx_isolation;
+----------------+
| @@tx_isolation |
+----------------+
| SERIALIZABLE   |
+----------------+
1 row in set (0.00 sec)

發佈了73 篇原創文章 · 獲贊 282 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章