mysql-事務管理(進階)--待續

請口述以下問題:

  1. 什麼是事務到特性,具體說說你到理解
  2. 請舉一個案例描述爲什麼要用到事務(轉賬)
  3. 事務的隔離級別
  4. 待續。。。

1、事務到特性(ACID)

  • Atomicty 原子性
    事務不可再分。
    現實中的一個需求,由多條SQL實現時,現實中的一件事只有兩種結果,要麼成功要麼失敗。事務機制就實現了將多條sql“當成”一條sql來執行,通過這種機制加上人爲的判斷,實現多條sql要麼都成功,要第都失敗。
  • Consistence 一致性
    事務的執行過程中,對數據表的影響是沒有的。
  • Isolation 隔離性
    當一個事件的執行,不會影響其他客戶端的數據表中查詢到的結果。
  • Duration 永久性
    當一個事務執行交,其影響就是永久的。

A->B(A給B轉賬100)
正常mysql流程:

A賬戶 B賬戶
A-100 B+100

可能情況:

情況 A賬戶 B賬戶
第一種 A-100 B+100
第二種 A-100 B
第三種 A B+100
第四種 A B

2、隔離性與隔離級別

當數據庫上有多個事務同時執行的時候,就可能出現髒讀(dirty read)、不可重複讀(non-repeatable read)、幻讀(phantom read)的問題,爲了解決這些問題,就有了“隔離級別”的概念。

SQL標準的事務隔離級別包括:讀未提交(read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和串行化(serializable )

  1. 讀未提交是指,一個事務還沒提交時,它做的變更就能被別的事務看到。事務沒提交,做等變更別等事務能看到
  2. 讀提交是指,一個事務提交之後,它做的變更纔會被其他事務看到。事務提交了,它做的變更別的事務才能看到
  3. 可重複讀是指,一個事務執行過程中看到的數據,總是跟這個事務在啓動時看到的數據是一致的。當然在可重複讀隔離級別下,未提交變更對其他事務也是不可見的。
  4. 串行化,顧名思義是對於同一行記錄,“寫”會加“寫鎖”,“讀”會加“讀鎖”。當出現讀寫鎖衝突的時候,後訪問的事務必須等前一個事務執行完成,才能繼續執行。讀也加鎖啊寫也加鎖,讀寫鎖衝突,後面的事務等前面事務執行完成再執行,一串

隔離得越嚴實,效率就會越低。需要找一個平衡點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章