分散式事務 解決資料一致性(一)事務原則與實現:事務、sql事務
阿新 • • 發佈:2018-11-05
事務:
定義:
是以一種可靠、一致的方式,訪問和操作資料庫中資料的程式單元。
原則:
*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;查詢事務的隔離級別。
資料庫預設都是可重複讀。