1. 程式人生 > >分散式事務 解決資料一致性(一)事務原則與實現:事務、sql事務

分散式事務 解決資料一致性(一)事務原則與實現:事務、sql事務

事務:

定義:

      是以一種可靠一致的方式,訪問和操作資料庫中資料的程式單元。

原則:

     *a、 原子性   * b、一致性  * c、隔離性  * d、永續性

場景:

    賬戶A給賬戶B轉100塊錢。

    賬戶A:+100,賬戶B:-100,是在兩個事務當中的。

原子性:賬戶A中+100,賬戶B-100,兩個事務要麼都成功,要麼都失敗,不可能存在賬戶A+100,而賬戶B卻沒有-100。

一致性:賬戶A和賬戶B,兩個賬戶之間不管怎麼轉賬,兩個賬戶之間的總金額不會發生變化。

隔離性:賬戶A給賬戶B轉賬100,賬戶B減去100,在轉賬中途,同時賬戶B就開始查餘額,這兩個操作是發生在兩個事務當中的,那麼賬戶B能不能查到賬戶A轉到的100?這就是資料庫的隔離性定義的。這會根據資料庫隔離性的設定,有不同的表示。

永續性:賬戶A與賬戶B之間的轉賬,一旦修改成功,就會存在資料庫中,不管系統是重啟或者什麼的,都可以永久儲存在資料庫中,賬戶B就可以看到轉賬過來的100。

mysql語法:

BEGIN TRANSACTION;開啟事務

開啟事務之後,後面的轉賬都是在這個事務當中,當commit之後,事務才會被提交。如果中途想回滾,可以rollback,中間的事務就會回滾。

此時去執行剩下兩條語句commit一下,提交事務,看下圖,可以很清晰的發現,只有提交事務之後才可以修改成功資料。

mysql可以通過select @@GLOBAL.TX_ISOLATION,@@TX_ISOLATION;查詢事務的隔離級別。

資料庫預設都是可重複讀。