事務指的是邏輯上的一組操作,組成這組操作的各個邏輯單元,要麼一起成功,要麼一起失敗。
***2.1手動開啟事務
start transaction; —開啟事務多條sql;
commit、rollback;
***2.2設定乙個自動提交引數
show variable like』%commit%』 — 檢視與commit相關的引數
set autocommit = 0; –將autocommit引數設定為off;
jdbc的事務管理的api:【步驟一】:建立乙個頁面- setautocommit()
- commit()
- rollback()
【步驟二】:匯入jdbc相關的jar包和工具類
【步驟三】:建立包結構
【步驟四】:提交到servlet -》 service -》 dao
【步驟五】:頁面跳轉。
*兩種方式:
在業務層獲得connection通過引數傳遞給dao,dbutils進行事務管理。在業務層獲得connection,將這個連線板定在當前的 執行緒中。在dao中獲得連線的話,可以從當前的執行緒中獲取。
threadlocal:hibernate框架。
沒有事務管理:queryrunner(database ds)6.1事務特性:query、update
有事務管理:queryrunner()
query、update
原子性:強調事務的不可分割6.2 如果不考事務的隔離性,引發一些安全問題:一致性:強調事務的執行的強,資料的完整性要保持一致。
隔離性:乙個事務的執行,不應該受到其他事務的干擾。
永續性:事務一旦結束(提交、回滾),資料就持久保持到資料庫。
一類讀問題:6.3解決引發的讀問題- 髒讀:乙個事務讀到了另乙個事務沒有提交的資料。
- 不可重複讀:乙個事務讀到了另乙個事物已經update的資料,導致當前的事務中多次查詢結果不一致。
- 虛讀、幻讀:乙個事務讀到另乙個事務一經提交的insert資料,導致在當前的事務中多次查詢結果不一致。
一類寫問題:
- 引發兩類丟失更新;
設定事務的隔離級別:7演示髒讀的發生:- read uncommitted :未提交讀,髒讀,不可重複讀,虛讀都可能發生。
- read committed :已提交讀,避免髒讀,但是不可重複讀和虛讀可能發生。
- repeated read:可重複讀,避免髒讀,不可重複讀,但是虛讀可能會發生。
- serializable:穿行讀,避免髒讀,不可重複讀,虛讀的發生,
mysql隔離級別:repeatable read oracle隔離級別:read committed
檢視mysql的隔離級別: select @@tx_isolation;
分別開啟兩個視窗:a,b7.1演示避免髒讀,不可重複讀分別檢視兩個視窗的隔離級別:select @@tx_isolation;
設定a視窗的隔離級別為read uncommitted。****set session transaction isolation level read uncommitted;
分別在兩個視窗中開啟事務:start transaction;
在b視窗中完成轉賬的操作:
update account set money = money + 50 where name = 『tommy』;
update account set money = money -50 where name = 『hans』;
在a視窗中進行查詢:
a視窗錢已到賬。
在b視窗中rollback,錢又返回了。—-a事務讀到了b事務還沒有提交的資料。
分別開啟兩個視窗:a,b7.2演示避免不可重複讀:分別檢視兩個視窗的隔離級別:select @@tx_isolation;
設定a視窗的隔離級別為read uncommitted。****set session transaction isolation level read committed;
分別在兩個視窗中開始事務:
start transaction
在b視窗中完成轉賬的操作:
update account set money = money + 50 where name = 『tommy』;
update account set money = money -50 where name = 『hans』;
在a建立口中進行查詢:—- 避免了髒讀;
在b視窗中提交了事務;
commit();
在a視窗在次查詢:—轉賬成功(不可重複讀:乙個事務讀到另乙個事務中已經提交的update的資料,導致多次查詢結果不一致)
分別開啟兩個視窗:a,b7.3避免虛讀:分別檢視兩個視窗的隔離級別:select @@tx_isolation;
設定a視窗的隔離級別為read uncommitted。****set session transaction isolation level repeatable read;
分別在兩個視窗中開啟事務。
update account set money = money + 50 where name = 『tommy』;
update account set money = money -50 where name = 『hans』;
在a視窗中進行查詢:—轉賬沒有成功
在b視窗提交事務:
在a視窗中在次查詢:—沒有變化,轉賬沒有成功:避免了不可重複讀。
在a視窗中commit;
在a視窗中再次查詢。
分別開啟兩個視窗:a,bee開發的三層結構:分別檢視兩個視窗的隔離級別:select @@tx_isolation;
設定a視窗的隔離級別為read uncommitted。****set session transaction isolation level serializable;
在a,b兩個視窗中分別開啟事務
在b視窗中完成insert操作:
insert into account(id,name,money) values(7,』shally』,5000);
在a建立中進行查詢的操作
a卡住,等待狀態; — 沒查到任何結果,等待b提交。
在b中提交,a中就顯示出來了。
序列,必須的等乙個事務成功後,在進行下一步。
ee的三層架構和mvc是不同的時候由不同的人、組織提出的開發方案。
Spring事務管理
spring是ssh中的管理員,負責管理其它框架,協調各個部分的工作。今天一起學習一下spring的事務管理。spring的事務管理分為宣告式跟程式設計式。宣告式就是在spring的配置檔案中進行相關配置 程式設計式就是用註解的方式寫到 裡。下面先說宣告式 spring配置檔案中關於事務配置總是由三...
spring事務管理
一 xml配置事務 二 註解的方式配置事務 bean id txmanaager class org.springframework.orm.hibernate3.hibernatetransactionmanager property name sessionfactory ref session...
Spring AOP 事務管理
首先需要配置乙個 bean 稱之為事務管理器。有datasourcetransactionmanager hibernatetransactionmanager等。然後用tx advice標籤配置事務。tx即是transaction的簡寫。定義事務屬性 傳播 隔離級別 讀寫 超時 異常。最後用 ao...