相關歷史文章(閱讀本文之前,您可能需要先看下之前的系列👇)
前言
通過本節,你將瞭解到:事務、本地事務、分佈式事務這幾個名詞的基本概念。
一、什麼是事務?
什麼是事務?
1.1 舉個生活中的例子
去超市買東西,一手交錢,一手交貨就是一個事務的例子。
事務的體現:交錢和交貨必須全部成功,事務才能算成功,任何一個活動失敗,整個事務就失敗了了。
1.2 舉個SQL例子
張三要給李四轉賬100元,那麼我們會有這樣的一段SQL:
begin transaction;
update account set money = money-100 where name = '張三';
update account set money = money+100 where name = '李四';
commit transaction;
事務的體現:這兩個SQL要麼全部成功,要麼全部失敗。
1.3 事務定義
事務是一系列操作組成的工作單元,該工作單元內的操作是不可分割的,即要麼所有操作都做,要麼所有操作都不做,這就是事務。
理解一:
事務可以看做是一次大的活動,它由不同的小活動組成,這些活動要麼全部成功,要麼全部失敗。
理解二:
事務可以看做是一個大的操作,它由一系列操作組成,這些操作要麼全部成功,要麼全部失敗。
二、本地事務/數據庫事務
數據庫事務:在計算機系統中,更多的是通過關係型數據庫來控制事務,這是利用數據庫本身的事務特性來實現的,因此叫數據庫事務。
本地事務:由於應用主要靠關係數據庫來控制事務,而數據庫通常和應用在同一個服務器,所以基於關係型數據庫的事務又被稱爲本地事務。
BTW:本地事務也稱爲數據庫事務或傳統事務(相對於分佈式事務而言)
三、分佈式事務
分佈式系統會把一個應用系統拆分爲可獨立部署的多個服務,因此需要服務與服務之間遠程之間遠程協作才能完成事務操作, 這種分佈式系統環境下由不同的服務之間通過網絡協作完成事務稱爲分佈式事務。
例如:用戶註冊送積分事務、創建訂單減庫存事務,銀行轉賬事務。
3.1 轉賬例子說明分佈式事務
張三轉賬100元給李四:
本地事務的實現:
begin transaction;
//1.本地數據庫操作:張三減少100元。
//2.本地數據庫操作:李四增加100元。
commit transaction;
分佈式事務的實現:
begin transaction;
//1.本地數據庫操作:張三減少100元。
//2.遠程調用:讓李四增加100元。
commit transaction;
在這裏本地事務,使用遠程調用另外一個服務的情況下,這就會產生分佈式事務了。本文我們先八卦到這裏,下節課進行介紹一下《事務的ACID以及在數據庫層面的體現》
分佈式事務解決方案「手寫代碼」:http://t.cn/AieNUirK
點擊「鏈接」,快人一步,快速學習分佈式事務!