事務就是一組sql語句
下面乙個簡單的場景:轉賬
張三轉100塊到李四的賬戶,這其實需要兩條sql語句:事務中的多個操作,要麼完全成功,要麼完全失敗!不可能存在成功一半的情況!也就是說給張三的賬戶減去100元如果成功了,那麼給李四的賬戶加上100元的操作也必須是成功的;否則給張三減去100元,以及給李四加上100元都是失敗的!張三的賬戶減去100元;
李四的賬戶加上100元。
如果在第一條sql語句執行成功後,在執行第二條sql語句之前,程式被中斷了(可能是丟擲了某個異常,也可能是其他什麼原因),那麼李四的賬戶沒有加上100元,而張三卻減去了100元。這肯定是不行的!
建立乙個賬戶表來理解事務,sql語句
在預設情況下,mysql每執行一條sql語句,都是乙個單獨的事務。如果需要在乙個事務中包含多條sql語句,那麼需要開啟事務和結束事務。
開啟事務:start transaction
結束事務:commit
或rollback
。
在執行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 隔離執行事務時,保持資...