使用JDBC進行資料庫的事務操作 1

2021-08-07 01:24:01 字數 2744 閱讀 1486

事務是指資料庫中的一組邏輯操作,這個操作的特點就是在該組邏輯中,所有的操作要麼全部成功,要麼全部失敗。在各個資料具有特別緊密的聯絡時,最好是使用資料庫的事務來完成邏輯處理。

例如路人甲a給路人甲b轉賬1000元,對應於如下兩條sql命令:

update

from account set

money

=money

-1000where name=

』a』;

update

from account set

money

=money

+1000where name=』b』;

在上面兩條sql語句中,任意一條sql執行過程中出現了錯誤,那麼就有可能造成a與b兩人最後總金額的錯誤。但如果是使用事務來處理,即使上面的轉賬過程出現了錯誤,那麼之前執行的資料庫操作即使成功也會一併回滾,形成所有的sql操作全部失敗,保證所有人的金額不變。

mysql資料庫預設事務是自動提交的,也就是發一條sql資料庫就執行一條。如果想將多條sql放置在乙個事務中執行,就必須使用如下語句:

start  transaction

sql1

sql2

…commit

當開啟事務後(start transaction),無論資料庫是否對其中的多條sql語句是否執行成功,只要沒有提交事務(commit),都會將之前執行的sql進行回滾。使資料回到開啟事務之前的值。

在mysql中,與事務相關的有開啟事務(start transaction),提交事務(commit),回滾事務(rollback)等等,下面將依次使用到。

接下來將會在先使用資料庫命令列視窗來進行事務操作的案例。

首先定義表account和客戶以及金額兩個列資料項:

按 ctrl+c 複製**

按 ctrl+c 複製**

準備完成:

輸入以下sql語句,來模擬a向b轉賬1000元:

start transaction

;

update account set

money

=money

-1000where name=』a』;

假設資料庫執行到此發生了錯誤,我們將mysql的命令列視窗關閉來代替這樣的「錯誤」:

這時如果我們再重新開啟mysql命令列視窗,重新檢視使用者的金額,發現由於我們開啟事務後,並未提交(commit),因此導致事務回滾,之前執行的sql語句全部不算成功,因此即使資料庫可能發生了錯誤,使用者金額還是能由事務保證不出意外:

還是上面的例子,這次我們在開啟事務,輸入sql命令,最後提交事務(commit),來確保這個事務內所有的sql命令都能被執行成功,輸入以下sql語句:

start transaction

;

update account set

money

=money

-1000where name=

』a』;

update account set

money

=money

+1000where name=

』b』;

commit;

即為下面的樣子:

這時候即使我將mysql命令列視窗關閉模擬提交事務後再出錯的情況,那麼重新查詢使用者金額還是能看出轉賬已經在出錯前確保完成了:

通過上面兩個例子可以看出,如果我們想將多條sql作為整體執行,只要有乙個條sql執行失敗或者資料庫突然出錯就回滾到最開始執行之前的狀態,使用事務是最好的選擇。

最後來看看事務回滾(rollback)。如果我們在事務處理的過程中,提交事務(commit)之前,如果想回滾之前的操作,可以使用rollback這條sql命令。

注:使用rollback命令將回滾之前到開啟事務的所有sql語句。

還是以上面的a與b兩個使用者的金額為例,現在兩者的金額都為1000:

現在我們開啟事務,執行幾條sql命令,然後再將這些已經執行的sql命令回滾:

使用rollback命令會回滾該事務內所有之前執行的sql命令,不會只回滾前面一條sql命令,因此即使我們對a和b的金額操作了多次,最終還是回到事務開啟前的金額數:

JDBC資料庫事務

事務 一組邏輯操作單元,使資料從一種狀態變換到另一種狀態。事務處理 事務操作 保證所有事務都作為乙個工作單元來執行,即使出現了故障,都不能改變這種執行方式。當在乙個事務中執行多個操作時,要麼所有的事務都被提交 commit 那麼這些修改就永久地儲存下來 要麼資料庫管理系統將放棄所作的所有修改,整個事...

JDBC 資料庫事務

事務 一組邏輯操作單元,使資料從一種狀態變換到另一種狀態。事務處理 也稱為事務操作,保證所有事務都作為乙個工作單元來執行,即使出現了故障,都不能改變這種執行方式。當在乙個事務中執行多個操作時,要麼所有的事務都被提交 commit 那麼這些修改就永久的儲存下來 要麼資料庫管理系統將丟棄所作的所有修改,...

使用PowerDesigner進行資料庫設計

1 啟動powerdesigner新建物理資料模型 2 工具欄 3 新建表模型 4 新增第一張表,可以雙擊表或右鍵選單開啟下面視窗 別忘了把owner選上dbo,然後切換到columns選項卡 完成後,表的模樣是下圖這副德行的 按此步驟依次新增其他表 6 新增表關係,選中工具箱的關係工具,由從表拖向...