下載吧 - 綠色安全的游戲和軟件下載中心

          軟件下載吧

          當前位置:軟件下載吧 > 數據庫 > MS_SQL > SQL基礎:SQL Server 事務,異常和游標詳解

          SQL基礎:SQL Server 事務,異常和游標詳解

          時間:2024-02-05 12:47作者:下載吧人氣:16

          事務

          在數據庫中有時候需要把多個步驟的指令當作一個整體來運行,這個整體要么全部成功,要么全部失敗,這就需要用到事務。

          1、 事務的特點

          事務有若干條T-SQL指令組成,并且所有的指令昨晚一個整體提交給數據庫系統,執行時,這組指令要么全部執行完成,要么全部取消。因此,事務是一個不可分割的邏輯單元。

          事務有4個屬性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)以及持久性(Durability),也稱作事務的ACID屬性。

          原子性:事務內的所有工作要么全部完成,要么全部不完成,不存在只有一部分完成的情況。

          一致性:事務內的然后操作都不能違反數據庫的然后約束或規則,事務完成時有內部數據結構都必須是正確的。

          隔離性:事務直接是相互隔離的,如果有兩個事務對同一個數據庫進行操作,比如讀取表數據。任何一個事務看到的所有內容要么是其他事務完成之前的狀態,要么是其他事務完成之后的狀態。一個事務不可能遇到另一個事務的中間狀態。

          持久性:事務完成之后,它對數據庫系統的影響是持久的,即使是系統錯誤,重新啟動系統后,該事務的結果依然存在。

          2、 事務的模式

          a、 顯示事務

          顯示事務就是用戶使用T-SQL明確的定義事務的開始(begin transaction)和提交(commit transaction)或回滾事務(rollback transaction

          b、 自動提交事務

          自動提交事務是一種能夠自動執行并能自動回滾事務,這種方式是T-SQL的默認事務方式。例如在刪除一個表記錄的時候,如果這條記錄有主外鍵關系的時候,刪除就會受主外鍵約束的影響,那么這個刪除就會取消。

          可以設置事務進入隱式方式:set implicit_transaction on;

          c、 隱式事務

          隱式事務是指當事務提交或回滾后,SQL Server自動開始事務。因此,隱式事務不需要使用begin transaction顯示開始,只需直接失業提交事務或回滾事務的T-SQL語句即可。

          使用時,需要設置set implicit_transaction on語句,將隱式事務模式打開,下一個語句會啟動一個新的事物,再下一個語句又將啟動一個新事務。

          3、 事務處理

          常用T-SQL事務語句:

          a、 begin transaction語句

          開始事務,而@@trancount全局變量用來記錄事務的數目值加1,可以用@@error全局變量記錄執行過程中的錯誤信息,如果沒有錯誤可以直接提交事務,有錯誤可以回滾。

          b、 commit transaction語句

          回滾事務,表示一個隱式或顯示的事務的結束,對數據庫所做的修改正式生效。并將@@trancount的值減1;

          c、 rollback transaction語句

          回滾事務,執行rollback tran語句后,數據會回滾到begin tran的時候的狀態

          4、 事務的示例

          begin transaction tran_bank;
          declare @tran_error int;
          set @tran_error = 0;
          begin try
          update bank set totalMoney = totalMoney – 10000 where userName = ‘jack’;
          set @tran_error = @tran_error + @@error;
          update bank set totalMoney = totalMoney + 10000 where userName = ‘jason’;
          set @tran_error = @tran_error + @@error;
          end try
          begin catch
          print ‘出現異常,錯誤編號:’ + convert(varchar, error_number()) + ‘, 錯誤消息:’ + error_message();
          set @tran_error = @tran_error + 1;
          end catch
          if (@tran_error > 0)
          begin
          –執行出錯,回滾事務
          rollback tran;
          print ‘轉賬失敗,取消交易’;
          end
          else
          begin
          –沒有異常,提交事務
          commit tran;
          print ‘轉賬成功’;
          end
          go
          標簽MSSQL,SQLServer,技術文檔,數據庫,SQLSERVER

          相關下載

          查看所有評論+

          網友評論

          網友
          您的評論需要經過審核才能顯示

          熱門閱覽

          最新排行

          公眾號

          主站蜘蛛池模板: 久久se精品一区二区影院| 亚洲AV无码一区二区三区鸳鸯影院| 亚洲国产一区二区三区青草影视| 精品免费AV一区二区三区| 日韩一区二区免费视频| 午夜一区二区在线观看| 国产精品99精品一区二区三区 | 一区二区三区亚洲视频| 精品3d动漫视频一区在线观看| 国产在线精品一区二区在线看| 国产成人av一区二区三区在线观看| 日本在线视频一区二区三区| 国产女人乱人伦精品一区二区| 色噜噜一区二区三区| 一区二区国产精品| 91精品一区国产高清在线| 亚洲AV午夜福利精品一区二区 | 国产成人精品一区二区秒拍| 国产无线乱码一区二三区| 蜜桃传媒视频麻豆第一区| 亚洲狠狠久久综合一区77777| 久久久老熟女一区二区三区| 午夜性色一区二区三区免费不卡视频 | 国产91大片精品一区在线观看| 精品国产aⅴ无码一区二区| 国产香蕉一区二区在线网站 | 亚洲av乱码一区二区三区| 伊人色综合一区二区三区影院视频| 成人区人妻精品一区二区三区 | 日韩精品无码视频一区二区蜜桃| 午夜福利一区二区三区在线观看 | 亚洲啪啪综合AV一区| 麻豆天美国产一区在线播放| 成人精品一区二区三区电影| 日本精品一区二区三区在线视频| 久久久久一区二区三区| 国产福利一区二区三区在线观看| 国产精品视频免费一区二区三区| 国产一区二区四区在线观看| 亚洲一区二区三区91| 午夜无码一区二区三区在线观看|