SQL高級(事務和觸發器)

来源:https://www.cnblogs.com/LEEZiiJia/archive/2022/10/07/16760257.html
-Advertisement-
Play Games

事務 四大屬性 1,原子性:事務是一個完整的整體,要麼都執行,要麼都不執行 2,一致性:當事務完成時,數據必須處於一致狀態 3,隔離性:對數據修改的所有併發事務是彼此隔離的,即事務必須是獨立的,不應以任何方式依賴於或影響其他 4,永久性:事務完成後,對資料庫的操作永久保留 事務控制 BEGIN:開始 ...


 

事務

四大屬性

      1,原子性:事務是一個完整的整體,要麼都執行,要麼都不執行

      2,一致性:當事務完成時,數據必須處於一致狀態

      3,隔離性:對數據修改的所有併發事務是彼此隔離的,即事務必須是獨立的,不應以任何方式依賴於或影響其他

      4,永久性:事務完成後,對資料庫的操作永久保留

事務控制

      BEGIN:開始事務

      COMMIT:提交事務,COMMIT 命令用於保存事務對資料庫所做的更改。

      ROLLBACK:回滾事務,ROLLBACK 命令用於撤銷尚未保存到資料庫中的事務。

      一旦事務提交或回滾,則事務結束。

註:為判斷語句執行是否出錯,可使用全局變數@@ERROR。

舉個慄子

       題目:改變B表中張三的性別為2時,王五更改為1

 

 代碼如下:

 

--開始事務
begin tran
--定義變數,存儲錯誤變數
declare @cw int
set @cw=0
update B set sex=2 where name='張三'
--用@@ERROR判斷語句執行是否成功
set @cw+=@@ERROR
update B set sex=1 where name='王五'
set @cw+=@@ERROR
--判斷語句執行是否成功
if(@cw<>0)
begin
--不等於0,語句出錯,回滾事務
print '語句執行失敗,已回滾'
rollback tran
end
else
begin
--等於0,提交事務
print '語句執行成功,已提交'
commit tran
end

 

結果:

 

 

       其實最適合使用事務的,是類似於轉賬一類的操作,一邊餘額減少,一邊餘額就要增加,如果餘額減少失敗,事務回滾,那麼相應的,另一邊的餘額也就不會再增加

 

觸發器

 

DML觸發器:
  用戶通過數據操作語句 DML(對錶或視圖的insert、delete、update)編輯數據,則執行DML觸發器。系統將觸發器和觸發它的語句作為可在觸發器內回滾的單個事務對待。如果檢測到錯誤,則整個事務自動回滾。

舉個慄子:

      有題:--A表張三語文成績減1,就給B表王五的出生年月加1

表A

 表B

 

代碼:

--判斷觸發器是否存在
if exists(select * from sys.triggers where name='trig_update')
drop trigger trig_update
go
--創建觸發器
create trigger trig_update
--在A表中創建
on A
--修改觸發器
for update
--當觸發觸發器後要做的操作
as

--定於變數存儲錯誤信息
declare @a int
set @a=0
update B set chusheng+=1 where name='王五'
set @a+=@@ERROR

--不等於0則修改失敗
if(@a<>0)
begin
print '王五信息修改失敗'
end
else
begin
print '王五信息修改成功'
end
go

 

結果:

 

 

       此觸發器執行的就是DML觸發器里的update,當A表發生改變,相應的B表也應該進行相關操作,值得註意的是,在update裡面,要修改的數據和被修改的數據不能來自同一張表

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 下載地址:https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.gz 解壓壓縮包 tar zxvf /opt/software/node-v14.16.0-linux-x64.tar.gz -C /opt/ 添加至環境變數 vim ...
  • 一、CentOS 7.9 安裝 Jenkins 2.361.2 1 下載地址:https://www.jenkins.io/download 2 簡介 Jenkins是一個Java開發的開源持續集成工具,廣泛用於項目開發,具有自動化構建、測試和部署等功能,它的運行需要Java環境。 二、Jenkin ...
  • 一、CentOS 7.9 安裝 nginx-1.22.0 下載地址:http://nginx.org/en/download.html 2 安裝前的準備 # 操作系統內核版本 uname -a # 操作系統發行版本 cat /etc/redhat-release 在安裝Nginx之前,我們需要確保全 ...
  • Arnold 是一款先進的蒙特卡洛光線追蹤渲染器,專為動畫長度和視覺效果的需求而打造。C4DtoA 4.4.0 使用 Arnold 7.1.3.1 , 是一個功能版本,帶來了對 Cinema 4D 2023 中 OCIO 顏色管理的支持、對 OSL 元數據支持的改進和一些錯誤修複。不再支持 Cine ...
  • 關於 LOAD segment with RWX permissions 警告, 這是 Binutils 2.39 引入的一個新的安全類型的警告, GCC在升級版本時會帶著新版本的 Binutils 一起發佈. 如果要消除這個警告, 要麼修改ld文件, 要麼屏蔽掉它. ...
  • KVM虛擬化 虛擬化介紹 虛擬化:在一臺電腦上虛擬出多個邏輯的電腦,而且每個邏輯電腦 它可以是不同操作系統 虛擬化技術:可以擴大硬體容量,單個cpu模擬出多個cpu並行, 允許一個平臺上同時運行多個操作系統,應用程式都可以在相互獨立 的空間內運行,而且互不影響。 為什麼企業使用虛擬化技術 1、 ...
  • 想象你的電腦上跑著機器學習,但是你又想聽歌,但是你的電腦只有一個CPU,如果把所有的CPU資源都拿去跑機器學習的話,你必須等程式跑完之後才能聽歌。但是現實是,你可以在機器學習程式運行的時候放著自己喜歡的歌,甚至還可以打開微信聊天。這就是操作系統一個很重要的功能,那就是操作系統需要支持多個進程同時 ...
  • 痞子衡嵌入式半月刊: 第 64 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...