interbase的事務處理

2021-03-31 08:56:58 字數 1766 閱讀 8597

如果你使用過sybase,ms sql server等關聯式資料庫,你可能對interbase的事務處理感到奇怪。在interbase中如何進行事務處理呢?如何啟動、提交、回退事務呢?interbase中進行事務處理的語句在**呢?特別在編寫和使用儲存過程、觸發器時,不少人存在這種疑惑。實際上,只要搞明白最關鍵的一點,interbase的事務處理就徹悟了,那就是:interbase不支援內嵌事務處理,根本不存在進行事務處理的語句。這也就是為什麼interbase的sql語言不和其他關聯式資料庫一樣稱作t-sql。你不可能像sybase等資料庫一樣,在儲存過程和觸發器中通過begin trans(action),***mit trans(action),rollback trans(action)等語句進行事務處理。那麼intebase的事務如何運作呢?在interbase中,所有的事務,不論是顯式的還是隱式的,全部通過客戶端啟動,並根據客戶端操作的情況要麼提交要麼回退。當客戶端發起乙個sql請求時,同時也啟動乙個事務,如果該語句執行成功,interbase就自動提交該事務;否則,如果該語句執行失敗,interbase就回退事務。從這個意義上講,能不能認為interbase的事務都是客戶端事務而不是伺服器端事務呢?否!一定要搞清楚,interbase的事務必然而且肯定是在伺服器端由interbase資料庫引擎操作管理的,只是interbase事務的啟動是在客戶端發起,而不是在伺服器端發起,這是最本質的一點。乙個sql語句的執行可能會巢狀呼叫或引發其他sql語句的執行,這些sql語句也會啟動各自的事務,我們把第乙個被啟動的事務稱為根事務,其他事務稱作子事務。這樣,根事務、子事務就形成了乙個具有巢狀結構的事務鏈。只有當該事務鏈中所有環節對應的操作全部執行成功(不能有任何乙個失敗),interbase才提交事務;相反,只要事務鏈中任意乙個環節對應的操作失敗(儘管其它環節操作成功),interbase就回退全部事務。interbase決不會進行部分事務的提交。這就是interbase的事務運作機理,也即interbase強調的atomic transaction。

明白了這一點,讓我們看一下interbase的儲存過程和觸發器的事務問題。儲存過程是由客戶端呼叫執行的,客戶端執行儲存過程的同時也啟動了乙個事務,不妨假定這個事務就是該儲存過程的根事務,儲存過程中的任何一條sql語句都會啟動相應的子事務,這些子事務巢狀在上述根事務中,形成乙個事務鏈。根據前面的說明,不論是根事務對應的呼叫操作,還是子事務對應的儲存過程中的操作,只要有乙個操作失敗,interbase就回退事務鏈中全部的事務,從而不對資料庫造成任何實質的更改;只有當所有的操作全部執行成功,interbase才會提交事務鏈中所有的事務,對資料庫進行實質性更改。

觸發器是由於客戶端執行插入、更改、刪除等操作時激發的。客戶端執行插入、更改、刪除等操作時肯定會啟動相應的事務,不妨假定為根事務,而由它們激發的觸發器中的sql語句操作啟動的子事務被巢狀上述的根事務中,從而也形成乙個事務鏈。如果觸發器中有某個語句執行失敗,interbase就會回退所有事務,觸發器的操作不會生效,激發它的插入或者更改或者刪除等動作也被回退;同樣,如果插入、更改或者刪除等操作失敗,整個事物也被回退,觸發器同樣也不起作用。只有當所有的操作全部執行成功,插入、更改、刪除操作才生效,觸發器也才起作用。

明白了上面的解釋,你可能也就理解了在儲存過程和觸發器中沒有事務操作語句的原因了。實質上,與其它資料庫相比,interbase極大的簡化了儲存過程、觸發器的編寫。

順便說明一下,如果你使用delphi的ibx編寫客戶端,你可以通過tibtransaction的starttransaction,***mit(或***mitretaining),rollback(或rollbackretaining)選擇合適的時機明確地啟動、提交、回退事務。但是,一定要遵守乙個原則,即:事務期間要盡可能地短。

PB事務處理

1 資料視窗更新,只要dberror有錯誤,而事先沒有做過任何commit工作,那麼rollback可以回滾到上次commit位置,即上次commit後所有的資料將被回滾。2 如果是直接寫入sql語句,只要資料庫出現錯誤,那麼rollback可以回滾到上次commit的位置,即上次commit後所有...

MySQL事務處理

start transaction,commit和rollback語法 start transaction begin work commit work and no chain no release rollback work and no chain no release set autocom...

ASP事務處理

asp事務處理。測試資料庫為sql server,伺服器為本機,資料庫名為test,表名為a,兩個欄位id int 主鍵標識,num int set conn server.createobject adodb.connection strconn provider sqloledb.1 persi...