首頁技術文章正文

什么是事務?什么是事務安全?

更新時間:2023-02-23 來源:黑馬程序員 瀏覽量:

事務

計算機中的事務是指某個程序執(zhí)行單元(寫操作),事務安全是當事務執(zhí)行后,保障事務的執(zhí)行是有效的,而不會導致數據錯亂。事務安全通常針對的是一連串操作(多個事務)而產生的統一結果。事務安全通常針對的是一連串操作(多個事務)而產生的統一結果。

MySQL中默認的寫操作是直接寫入的,可以執(zhí)行寫操作SQL,也可以同步到數據表。

例如銀行轉賬,從A賬戶轉賬到B賬戶,創(chuàng)建數據表代碼如下:

create table t_52(
    id int primary key auto_increment,
    name varchar(50) not null,
    account decimal(10,2) default 0.00
)charset utf8;

insert into t_52 values(null,'Tom',10000),(null,'Lucy',100);

Tom向Lucy轉賬,一定是分為兩步

# Tom扣錢
update t_52 set account = account - 1000 where id = 1;

# Lucy收錢
update t_52 set account = account + 1000 where id = 2;

以上兩步必須都成功轉賬才能叫成功,兩步操作無法確保哪一步會出問題(尤其是第二步)。為了保障兩步都成功才能叫事務安全。

事務安全原理

事務安全是在操作前告知系統,接下來所有的操作都暫不同步到數據表,而是記錄到事務日志,指導后續(xù)所有操作都成功,再進行同步;否則取消所有操作。

以上述轉賬為例

graph TB
A(轉賬開始)-->B[開啟事務]
B-->C{事務1:Tom轉出1000}
C-->|成功|D[記錄到事務日志]
C-->|失敗|G
D-->E{事務2:Lucy轉入1000}
D-->|失敗|G
E-->|成功|F[記錄到事務日志]
F-->G[關閉事務<br>成功:提交事務 同步到數據表\清除事務日志<br>失敗:回滾事務 清除事務日志]
G-->H((結束))

事務安全常見類型

事務安全是利用自動或者手動方式實現事務管理,事務安全包括以下幾種類型:

自動事務處理:系統默認,操作結束直接同步到數據表(事務關閉狀態(tài))

系統控制:變量 autocommit(值為ON,自動提交)

手動事務處理的常見操作

開啟事務: start transaction

關閉事務

提交事務:commit(同步到數據表同時清空日志數據)

回滾事務:rollback(清空日志數據)

事務回滾:在長事務執(zhí)行中,可以在某個已經成功的節(jié)點處設置回滾點,后續(xù)回滾的話可以回到某個成功點

設置回滾點:savepoint 回滾點名字

回滾到回滾點:rollback to 回滾點名字
仍舊以手動事務中啟用事務轉賬,成功提交事務為準,演示銀行轉賬從A賬戶轉賬到B賬戶的過程。

創(chuàng)建數據表

create table t_52(
    id int primary key auto_increment,
    name varchar(50) not null,
    account decimal(10,2) default 0.00
)charset utf8;

insert into t_52 values(null,'Tom',10000),(null,'Lucy',100);

轉賬:Tom向Lucy轉賬,一定是分為兩步

# Tom扣錢
update t_52 set account = account - 1000 where id = 1;

# Lucy收錢
update t_52 set account = account + 1000 where id = 2;

事務安全原理

事務安全是在操作前告知系統,接下來所有的操作都暫不同步到數據表,而是記錄到事務日志,指導后續(xù)所有操作都成功,再進行同步;否則取消所有操作

graph TB
A(轉賬開始)-->B[開啟事務]
B-->C{事務1:Tom轉出1000}
C-->|成功|D[記錄到事務日志]
C-->|失敗|G
D-->E{事務2:Lucy轉入1000}
D-->|失敗|G
E-->|成功|F[記錄到事務日志]
F-->G[關閉事務<br>成功:提交事務 同步到數據表\清除事務日志<br>失敗:回滾事務 清除事務日志]
G-->H((結束))

總結:事務的目的就是為了保障連續(xù)操作的一致性,保證結果的完整性。事務的原理是通過將操作結果暫時保存在事務日志中,等所有操作的結果都是成功的,然后一并同步到數據表。


分享到:
在線咨詢 我要報名
和我們在線交談!