開高級程序開發設計中,不免會有數據庫的寫入和輸出,有些時候考慮到寫入多個數據在其中一個業務內進行排查和修改,萬一在邏輯下其中一行在數據或者邏輯報錯,會致使以前寫入的內容原封不動在數據庫裏面mysql
事務簡單來講,就是處理一件數據庫事情
俗稱數據庫事務(Datebase Transaction)
是在程序設計內一段(單元)內容進行操做
複製代碼
原子性(atomicity):一個事務內是徹底獨立,不可分割的sql
隔離性(isoation):事務內容不能被其餘事務被幹擾數據庫
一致性(consistenc):事務必須從一個一致性狀態轉爲另一個一致性安全
持久性(durability):一個事務一旦提交,它的數據庫的影響是永久的bash
show engines; --查看數據庫引擎
default-storage-engine = Innodb --my.ini修改引擎
複製代碼
在Mysql 5.2以後帶Innodb數據庫引擎數據才能使用事務處理 通常Mysql默認事務爲自動提交(autocommit)服務器
begin; --開啓事務(START TANSACTION)
commit; --提交事務
rollback; --回滾事務
複製代碼
回到剛剛的程序設計邏輯裏面
在數據寫入前,事務改成手動提交(begin),若是業務邏輯中途出錯,捕捉異常,而後吧數據迴歸到原始狀態,若是沒有任何問題,永久保存(commit),這樣保證這段內容輸入爲正確的數據 session
事務可以給業務邏輯上必定寫入安全,可是在數據上存在大量的併發風險併發
爲有效防止事務併發可能性發生,mysql在事務處理上添加了事務隔離
事務隔離狀況以下ui
select @@tx_isolation --mysql5查詢級別
select @@transaction_isolation; --mysql8查詢級別
set session transaction isolation level XXX
--設置會話級別
複製代碼
有些時候事務可以給予安全的數據寫入,可是也有弊端,因此通常都要善用數據庫的時間處理,好比說服務器惟一支付回調接口才能操做數據,其餘接口只能查看狀態,可是支付接口會影響庫存,呢只能在數據操做上爲不可重複讀,通常須要鎖行atom