資料庫知識 事務

2021-10-05 06:14:20 字數 2172 閱讀 2576

事務就是一組sql語句

下面乙個簡單的場景:轉賬

張三轉100塊到李四的賬戶,這其實需要兩條sql語句:

張三的賬戶減去100元;

李四的賬戶加上100元。

如果在第一條sql語句執行成功後,在執行第二條sql語句之前,程式被中斷了(可能是丟擲了某個異常,也可能是其他什麼原因),那麼李四的賬戶沒有加上100元,而張三卻減去了100元。這肯定是不行的!

事務中的多個操作,要麼完全成功,要麼完全失敗!不可能存在成功一半的情況!也就是說給張三的賬戶減去100元如果成功了,那麼給李四的賬戶加上100元的操作也必須是成功的;否則給張三減去100元,以及給李四加上100元都是失敗的!

建立乙個賬戶表來理解事務,sql語句

在預設情況下,mysql每執行一條sql語句,都是乙個單獨的事務。如果需要在乙個事務中包含多條sql語句,那麼需要開啟事務和結束事務。

開啟事務:start transaction

結束事務:commitrollback

在執行sql語句之前,先執行strat transaction,這就開啟了乙個事務(事務的起點),然後可以去執行多條sql語句,最後要結束事務,commit表示提交,即事務中的多條sql語句所做出的影響會持久化到資料庫中。或者rollback,表示回滾,即回滾到事務的起點,之前做的所有操作都被撤消了!

jdbc處理事務的**格式:

try  catch()
用jdbc連線操縱資料庫,例項**

dao層**:

public class accountdao  catch (exception e) }}

dao層的連線物件由呼叫該方法的 方法建立,這樣避免建立多個連線,

setautocommit(boolean):設定是否為自動提交事務,如果true(預設值就是true)表示自動提交,也就是每條執行的sql語句都是乙個單獨的事務,如果設定false,那麼就相當於開啟了事務了;con.setautocommit(false)表示開啟事務!!!

commit():提交結束事務;con.commit();表示提交事務

rollback():回滾結束事務。con.rollback();表示回滾事務

public class demo1  catch (exception e) catch(sqlexception el)

throw new runtimeexception(e);

} }@test

public void fun1()

}

執行結果:

如果在兩條語句之間 插入異常,丟擲,**獲後,就執行回滾

dao.updatebalance(con, from,-money);

//下面if是假設丟擲異常執行回滾

if(true)

dao.updatebalance(con, to,money);

回滾後會撤銷之前的操作,查詢結果不變。

資料庫事務基礎知識

為什麼80 的碼農都做不了架構師?工作也有好幾年了,一直在用資料庫,但是一些基本知識老容易遺忘,現在整理一下,作為複習。資料庫事物有嚴格的定義,滿足4個特性 原子性 atomicity 事務中的所有元素作為乙個整體提交或回滾,事務的個元素是不可分的,事務是乙個完整操作。一致性 consistemcy...

資料庫事務知識點

在併發環境下,事務的隔離性很難保證,從而引發併發一致性問題。對於簡單的事務隔離性問題,我們可以通過設定事務隔開級別來保證資料一致性,通常通過 transational註解來管理事務。其預設使用資料庫引擎預設的隔離級別。read committed 授權讀取級別 repeatable read 可重複...

資料庫事務相關理論知識

儲存結構 序列化排程 隔離級別及實現方式 併發控制 事務 transaction 是構成單一邏輯工作單元的操作集合。是訪問並可能更新各種資料項的乙個程式執行單元。原子性 atomicity 事務操作在資料庫中要麼全部正確反映出來,要麼完全不反映。一致性 consistency 隔離執行事務時,保持資...