數據庫學習筆記(九丶事務特性)

事務就是一組DML語句組成,這些語句在邏輯上存在相關性,這一組DML語句要麼所有成功,要麼所有失敗,是一個總體。MySQL提供一種機制,保證咱們達到這樣的效果。事務還規定不一樣的客戶端看到的數據是不相同的。
開始一個事務數據庫

start transaction;

建立一個保存點session

savepoint 保存點名;

回到保存點(根據具體狀況)併發

rollback to 保存點名;

事務操做注意事項ide

  • 若是沒有設置保存點,也能夠回滾,只能回滾到事務的開始。直接使用 rollback(前提是事務尚未提交)
  • 若是一個事務被提交了(commit),則不能夠回退(rollback)
  • 能夠選擇回退到哪一個保存點
  • InnoDB支持事務,MyISAM不支持事務
  • 開始事務能夠使用 start transaction
    事務的隔離級別
    當咱們有多個客戶端同時操做數據庫的某張表,對於進行隔離操做,MySQL提供了隔離級別。
    當MySQL表被多個線程或者客戶端開啓各自事務操做數據庫中的數據時,MySQL提供了一種機制,可讓不一樣的事務在操做數據時,具備隔離性。從而保證數據的一致性。
    無隔離性的問題
    髒讀

    是指當一個事務正在訪問數據,而且對數據進行了修改,而這種修改尚未提交到數據庫中,這時,另一個事務也訪問這個數據,而後使用了這個數據。學習

不可重複讀線程

是指在一個事務內,屢次讀同一數據。在這個事務尚未結束時,另一個事務也訪問該同一數據。那麼,在第一個事務中的兩次讀數據之間,因爲第二個事務的修改,那麼第一個事務兩次讀到的的數據多是不同的。這樣就發生了在一個事務內兩次讀到的數據是不同的,所以稱爲是不可重複讀。(即不能讀到相同的數據內容)。code

幻讀blog

是指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的數據進行了修改,這種修改涉及到表中的所有數據行。同時,第二個事務也修改這個表中的數據,這種修改是向表中插入一行新數據。那麼,之後就會發生操做第一個事務的用戶發現表中還有沒有修改的數據行,就好象發生了幻覺同樣。事務

注:不可重複讀的重點是修改,對於一樣的條件, 你讀取過的數據,再次讀取出來發現值不同了。幻讀的重點在於新增或者刪除,對於一樣的條件, 第1次和第2次讀出來的記錄數不同。
數據庫學習筆記(九丶事務特性)
設置事務隔離級別ci

set session transaction isolation level read uncommitted;

事務的ACID特性

  • 原子性(Atomicity):
    事務是應用中最小的執行單位,就如原子是天然界的最小顆粒,具備不可再分的特徵同樣,事務是應用中不可再分的最小邏輯執行體。
  • 一致性(Consistency):
    事務執行的結果,必須使數據庫從一個一致性狀態,變到另外一個一致性狀態。當數據庫只包含事務成功提交的結果時,數據庫處於一致性狀態。若是系統運行發生中斷,某個事務還沒有完成而被迫中斷,而改未完成的事務對數據庫所作的修改已被寫入數據庫,此時數據庫就處於一種不正確(不一致)的狀態。所以一致性是經過原子性來保證。
    的。
  • 隔離性(Isolation):
    各個事務的執行互不干擾,任意一個事務的內部操做對其餘併發事務都是隔離的。也就是說,併發執行的事務之間不能看到對方的中間狀態,併發執行的事務之間不能互相影響。
  • 持久性(Durability):持久性是指一個事務一旦被提交,它對數據庫所作的改變都要記錄到永久存儲其中(如:磁盤)。
相關文章
相關標籤/搜索