1.什麼是事務
一件事情有n個組成單元 要不這n個組成單元同時成功 要不n個單元就同時失敗
就是將n個組成單元放到乙個事務中
2.mysql的事務
預設的事務:一條sql語句就是乙個事務 預設就開啟事務並提交事務
手動事務:
1)顯示的開啟乙個事務:start transaction
2)事務提交:commit代表從開啟事務到事務提交 中間的所有的sql都認為有效 真正的更新資料庫
3)事務的回滾:rollback 代表事務的回滾 從開啟事務到事務回滾 中間的所有的 sql操作都認為無效資料庫沒有被更新
預設是自動事務:
執行sql語句:executeupdate() ---- 每執行一次executeupdate方法 代表 事務自動提交
通過jdbc的api手動事務:
開啟事務:conn.setautocomnmit(false);
提交事務:conn.commit();
回滾事務:conn.rollback();
注意:控制事務的connnection必須是同乙個
執行sql的connection與開啟事務的connnection必須是同乙個才能對事務進行控制
1.queryrunner
有參構造:queryrunner runner = new queryrunner(datasource datasource);
有參構造將資料來源(連線池)作為引數傳入queryrunner,queryrunner會從連 接池中獲得乙個資料庫連線資源運算元據庫,所以直接使用無connection引數 的update方法即可運算元據庫
無參構造:queryrunner runner = new queryrunner();
無參的構造沒有將資料來源(連線池)作為引數傳入queryrunner,那麼我們在使 用queryrunner物件運算元據庫時要使用有connection引數的方法
1.事務的特性acid
1)原子性(atomicity)原子性是指事務是乙個不可分割的工作單位,事務中的操作 要麼都發生,要麼都不發生。
2)一致性(consistency)乙個事務中,事務前後資料的完整性必須保持一致。
3)隔離性(isolation)多個事務,事務的隔離性是指多個使用者併發訪問資料庫時, 乙個使用者的 事務不能被其它使用者的事務所干擾,多個併發事務之間資料要相互隔離。
4)永續性(durability)永續性是指乙個事務一旦被提交,它對資料庫中資料的改變 就是永久性的,接下來即使資料庫發生故障也不應該對其有任何影響。
2.併發訪問問題----由隔離性引起
如果不考慮隔離性,事務存在3中併發訪問問題。
髒讀:b事務讀取到了a事務尚未提交的資料 ------ 要求b事務要讀取a事 務提交的資料
不可重複讀:乙個事務中 兩次讀取的資料的內容不一致 ----- 要求的是乙個事 務中多次讀取時資料是一致的 — unpdate
幻讀/虛讀:乙個事務中 兩次讀取的資料的數量不一致 ----- 要求在乙個事務多 次讀取的資料的數量是一致的 --insert delete
3.事務的隔離級別
read uncommitted : 讀取尚未提交的資料 :哪個問題都不能解決
read committed:讀取已經提交的資料 :可以解決髒讀 ---- oracle預設的
repeatable read:重讀讀取:可以解決髒讀 和 不可重複讀 —mysql預設的
serializable:序列化:可以解決 髒讀 不可重複讀 和 虛讀—相當於鎖表
注意:mysql資料庫預設的隔離級別
檢視mysql資料庫預設的隔離級別:sel
設定mysql的隔離級別:set session transaction isolation level 設定事務隔離級別
mysql的事務控制:
開啟事務:start transaction;
提交:commit;
回滾:rollback;
jdbc事務控制:
開啟事務:conn.setautocommit(false);
提交:conn.commit();
回滾:conn.rollback();
dbutils的事務控制 也是通過jdbc
**threadlocal:**實現的是通過執行緒繫結的方式傳遞引數
概念:
事務的特性acid
併發問題:髒讀、不可重讀、虛讀\幻讀
解決併發:設定隔離級別
read uncommitted
read committed
repeatable read (mysql預設)
serialazable
隔離級別的效能:
read uncommitted>read committed>repeatable read>serialazable
安全性:
read uncommitted
PB事務處理
1 資料視窗更新,只要dberror有錯誤,而事先沒有做過任何commit工作,那麼rollback可以回滾到上次commit位置,即上次commit後所有的資料將被回滾。2 如果是直接寫入sql語句,只要資料庫出現錯誤,那麼rollback可以回滾到上次commit的位置,即上次commit後所有...
MySQL事務處理
start transaction,commit和rollback語法 start transaction begin work commit work and no chain no release rollback work and no chain no release set autocom...
ASP事務處理
asp事務處理。測試資料庫為sql server,伺服器為本機,資料庫名為test,表名為a,兩個欄位id int 主鍵標識,num int set conn server.createobject adodb.connection strconn provider sqloledb.1 persi...