Ⅰ 什麼是事務事務中的提交和回滾是什麼意思
事務(Transaction),一般是指要做的或所做的事情。在計算機術語中是指訪問並可能更新資料庫中各種數據項的一個程序執行單元(unit)。事務通常由高級資料庫操縱語言或編程語言(如SQL,C++或Java)書寫的用戶程序的執行所引起,並用形如begin transaction和end transaction語句(或函數調用)來界定。
事務的提交是指事務里的所有操作都正常完成。
事務的回滾是指程序或數據處理錯誤,將程序或數據恢復到上一次正確狀態的行為。
(1)事務回滾就是用異常處理流程擴展閱讀:
事務的特徵:
事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。
1、原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做。
2、一致性(consistency)。事務必須是使資料庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
隔離性(isolation)。一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對並發的其他事務是隔離的,並發執行的各個事務之間不能互相干擾。
4、持久性(rability)。持久性也稱永久性(permanence),指一個事務一旦提交,它對資料庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。
Ⅱ 關於sql中的事務回滾問題 ,就是commit 和 rollback的順序問題
begin
try
和
end
try捕獲產生的錯誤
然後在begin
catch
和
end
catch
塊中使用rollback語句讓事務回滾
你可以簡單地先寫個小例子試一下,體會下rollback的用法
比如:
begin
tran
update
table2
set
b=10,c=10
where
a=1
rollback
tran
就會發現數據沒有被更新
然後再結合begin
try
end
try
begin
catch
end
catch的用法
就能實現在事務執行過程中出錯後回滾的功能
大概的形式就是這樣:
begin
tran
begin
try
--做相關操作
--結束的時候如果沒有錯誤則用commit提交事務
commit
tran
end
try
begin
catch
--出現錯誤的時候會跳轉到這里
--用rollback回滾事務
rollback
tran
end
catch
Ⅲ hibernate的事務回滾什麼意思
對於J2EE 應用程序而言,事務的處理一般有兩種模式:
1. 依賴特定事務資源的事務處理
這是應用開發中最常見的模式,即通過特定資源提供的事務機制進行事務管理。
如通過JDBC、JTA 的rollback、commit方法;hibernate Transaction 的rollback、commit方法等。這種方法大家已經相當熟悉。
2. 依賴容器的參數化事務管理
通過容器提供的集約式參數化事務機制,實現事務的外部管理,如EJB 中的事務管理模式。
如,下面的EJB事務定義中,將SessionBean MySession的doService方
法定義為Required。也就是說,當MySession.doServer 方法被某個線程調用時,容器將此線程納入事務管理容器,方法調用過程中如果發生異常,當前事務將被容器自動回滾,如果方法正常結束,則容器將自動提交當前事務。
<Container-transaction >
<method >
<ejb-name>MySession</ejb-name>
Ⅳ sping管理事務,要手動回滾只能拋異常嗎
在Spring框架中對HIbernate事務處理,一般是在xml文件中配置。直接拋出,service也拋出,action獲取,就會回滾。。。。 一般都是也業務處處理事務,service中處理事務繼續拋出,action中獲取錯誤信息就可以了.....
Ⅳ sql存儲過程中事務出現錯誤回滾,那麼在回滾之後的語句會執行嗎
會的來。
一般回滾操作都是寫自在異常處理,或是sql的最後。如果你的sql中出現錯誤 ,代碼會立即跳轉到錯誤處理代碼上執行,比如回滾,但緊接在錯誤行之後的代碼不會執行的。
如
1.update .....;
2.select ......;
3.when Exception
....rollback;
4.insert into .....
以上偽代碼,如果行1出錯,行2將不會執行,直接跳轉到行3,然後行4 也會執行。
Ⅵ 提交事務出現異常時,不是應該事務回滾嗎
oracle使用語句savepoint sp_begintran開啟顯式事務,鎖本身和事務是沒有關系的,只要是資料庫的操作都會產生鎖。處於事務中的SQL語句只有這個事務提交(commit)之後,事務中的SQL語句影響的表記錄上的鎖才會釋放。鎖常見有共享鎖(select語句產生)和排它鎖(DML語句產生),如果一個表上載入有共享鎖,還可以疊加共享鎖,但不能疊加排它鎖。如果一個表上載入有排他鎖,就什麼鎖都不能加了,也就是說如果DML語句佔用過多的時間,這些資料庫效率就不高,就需要優化,當然select語句性能低了也不行。
每個存儲過程可以不用顯式事務,它本身就為你開啟了一個隱式事務,如果需要開啟顯示事務,就通過savepoint sp_begintran開啟,無論是不是顯式還是隱式事務,你都得通過commit work提交事務,通過exception捕捉SQL語句異常,在異常發生時需要回滾事務(rollback work)。
Ⅶ 關於spring的事務與異常處理
記錄日誌後再拋出異常
protected<T>intexecuteUpdate(Stringsql,Object[]params,Class<T>clazz){
Loggerlog=Logger.getLogger(clazz);
intresult=0;
try{
result=jdbc.update(sql,params);
}catch(DataAccessExceptione){
log.error(clazz+e.getMessage(),e);
throwe;
}
returnresult;
}
把DAO的異常最後仍交由Spring-tx處理,這樣跟是否catch過就沒差了。
另外我還改了一下return的方式。
Ⅷ 什麼是SQLSERVER事務處理和事務回滾
事務(Transaction)是訪問並可能更新資料庫中各種數據項的一個程序執行單元(unit)。事務通常由高級資料庫操縱語言或編程語言(如SQL,C++或Java)書寫的用戶程序的執行所引起,並用形如begin transaction和end transaction語句(或函數調用)來界定。事務由事務開始(begin transaction)和事務結束(end transaction)之間執行的全體操作組成。
當一個事務的某一個操作發生問題時,整個事務可以回滾掉,就像沒有做任何操作一樣。這就是事務回滾。
如果一個事務的所有操作均成功,則就可以提交事務,保證事務的完整性。
應用程序主要通過指定事務啟動和結束的時間來控制事務。
以MS SQL Server的Transac-SQL語言為例,
事務啟動:
BEGIN TRAN [ SACTION ] [ transaction_name | @tran_name_variable [ WITH MARK [ 'description' ] ] ]
結束事務
可以使用 COMMIT 或 ROLLBACK 語句結束事務。
1 事務的提交
BEGIN TRANSACTION T1
INSERT tabel1 ...
UPDATE table2 ...
...
/* 當所有成功操作完成,提交事務 */
COMMIT TRAN T1
2 事務的回滾
BEGIN TRANSACTION T1
INSERT tabel1 ...
...
/* 當發生錯誤或事務被取消, 回滾事務 */
ROLLBACK TRAN T1
Ⅸ 事務的提交和回滾是什麼意思 Java
平時見到的資料庫操作都是原子性的,也就是說單純性的,要嘛插入,要專嘛修改,要嘛刪除。
事務就是一屬系列相關資料庫操作的集合,因此,只有事務里的所有操作都正常完成才算一次事務提交,如果有一個操作不完成,資料庫就恢復到操作前狀態,這叫做回滾。
舉個例子:
你要給老媽匯100元,一次完整的匯款操作就是一個事務。
簡單列舉下匯款的主要流程:
1:從你帳號拿出100元,相應的資料庫操作就是---》減去100元從你的帳號
2:銀行將100元存入老媽的帳號,相應的資料庫操作就是----》修改老媽的帳號的余額
步驟1,2和一起算一次事務,它包括兩次資料庫的修改處理,因此,如果兩則有一個出現異常(比如匯款時停電),則正常的銀行系統不會將你的100元丟失,也不會將老媽帳戶加100.
如果沒有事務管理,減去100和加上100是兩個單獨的操作,這時候如果 把你帳戶減去100元後,突然停電, 不僅老媽收不到錢,你的100元也沒了。很可怕吧!還好只是100!有了事務管理呢,資料庫系統發現這次事務出現了中斷,就不會把你的錢扣除。
建議看看書!理解的更深入,如有問題,留言