事務是一組邏輯操作單元(包含乙個或多個dml操作),使資料從一種狀態變換到另一種狀態
保證所有的事務都做為乙個工作單元來執行,即使出現了故障,都不能改變這種執行方式。當乙個事務中執行多個操作時,要麼所有事務都被提交(commit),那麼這些修改就永久的儲存下來;要麼 資料庫管理系統 將放棄所有所做的修改,整個事務回滾(rollback)到最初狀態。注意:資料一旦提交將不可回滾
ddl操作:一旦執行,都會自動提交
dml操作:預設情況下執行會自動提交。但我們可以通過set autocommit = false的方式,取消dml操作的自動提交。
預設在關閉連線時會自動提交資料,所以同乙個事物要確保使用乙個連線,並且在確保事物執行沒有出現錯誤之後再關閉連線。
aa向bb各有1000塊錢,現在bb向aa借100塊,那麼在資料庫裡面的操作就是aa的money減少100,bb的money 增加100。正常情況下,aa的money變為900,bb的money變為1000,轉賬成功。但是如果發生特殊情況,在aa轉賬給bb的一瞬間,網突然斷了,或者其他什麼情況,導致aa的money減少100,但bb的money並沒有增加100,這個時候就出現了,轉賬失敗。
怎麼解決這個問題:如果轉賬失敗,需要回滾資料到初始情況。
具體做法:
無論是aa的減少money還是bb的增加money,需要然他們公用乙個connection,即處在同乙個事物當中。
取消自動提交。
兩個dml操作結束之後commit。
如果中間出現異常,在catch中回滾。
@test
public void test2() catch (exception e) catch (sqlexception e1)
}finally
}/**
* 考慮資料庫事務之後的通用增刪改操作(不用自己建立連線,同時不要去關閉連線 )
* * @return
* @throws exception
*/public int update(connection conn, string sql, object... args)
return ps.executeupdate();
} catch (exception e) finally
return 0;
}/**
* 考慮資料庫事務之後的通用的查詢 操作(連線用引數傳進來,同時不用關閉連線資源)
* @throws sqlexception
*/public t queryone(classclazz,connection conn,string sql,object...args)
rs = ps.executequery();
resultsetmetadata metadata = rs.getmetadata();
int columncount = metadata.getcolumncount();
if(rs.next())
return t;
}} catch (exception e) finally
return null;
}
資料庫 什麼是事務?
1 事務 transaction 是併發控制的單位,是使用者定義的乙個操作序列。這些操作要麼都做,要麼都不做,是乙個不可分割的工作單位。通過事務,sql server能將邏輯相關的一組操作繫結在一起,以便伺服器保持資料的完整性。2 事務通常是以begin transaction開始,以commit或...
什麼是資料庫事務?
事務是作為乙個邏輯單元執行的一系列操作,要麼一起成功,要麼一起失敗。乙個邏輯工作單元必須有四個屬性,稱為 acid 原子性 一致性 隔離性和永續性 屬性,只有這樣才能成為乙個事務。原子性 事務必須是原子工作單元 對於其資料修改,要麼全都執行,要麼全都不執行。一致性 事務在完成時,必須使所有的資料都保...
什麼是資料庫事務?
事務是作為乙個邏輯單元執行的一系列操作,要麼一起成功,要麼一起失敗。乙個邏輯工作單元必須有四個屬性,稱為acid 原子性 一致性 隔離性和永續性 屬性,只有這樣才能成為乙個事務。原子性 事務必須是原子工作單元 對於其資料修改,要麼全都執行,要麼全都不執行。一致性 事務在完成時,必須使所有的資料都保持...