什麼是資料庫事務

2021-10-02 22:41:17 字數 1597 閱讀 7508

事務是一組邏輯操作單元(包含乙個或多個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 原子性 一致性 隔離性和永續性 屬性,只有這樣才能成為乙個事務。原子性 事務必須是原子工作單元 對於其資料修改,要麼全都執行,要麼全都不執行。一致性 事務在完成時,必須使所有的資料都保持...