日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解SQL Server 中的 ACID 屬性

瀏覽:265日期:2023-03-06 14:25:15
目錄
  • SQL Server 中的事務是什么?
  • 事務的 ACID 屬性是什么?
  • SQL Server 中事務的原子性
  • SQL Server 中事務的一致性
  • SQL Server 中事務的隔離性
  • SQL Server 中事務的持久性

SQL Server 中的事務是什么?

SQL Server 中的事務是一組被視為一個單元的 SQL 語句,它們按照“做所有事或不做任何事”的原則執行,成功的事務必須通過 ACID 測試。

事務的 ACID 屬性是什么?

首字母縮寫詞 ACID 是指事務的四個關鍵屬性

  • 原子性: Atomicity
  • 一致性: Consistency
  • 隔離性: Isolation
  • 持久性: Durability

為了理解這一點,我們將使用以下兩個表測試。

Product (產品表)

ProductIDNamePriceQuantity101Laptop15000100102Desktop20000150104Mobile3000200105Tablet4000250

ProductSales (產品銷售表)

ProductSalesIDProductIDQuantitySold110110210215310430410535

請使用以下 SQL 腳本創建并使用示例數據填充 Product 和 ProductSales 表。

IF OBJECT_ID("dbo.Product","U") IS NOT NULL
    DROP TABLE dbo.Product
IF OBJECT_ID("dbo.ProductSales","U") IS NOT NULL
    DROP TABLE dbo.ProductSales
GO
CREATE TABLE Product
(
  ProductID INT PRIMARY KEY, 
  Name VARCHAR(40), 
  Price INT,
  Quantity INT
 )
GO
INSERT INTO Product VALUES(101, "Laptop", 15000, 100)
INSERT INTO Product VALUES(102, "Desktop", 20000, 150)
INSERT INTO Product VALUES(103, "Mobile", 3000, 200)
INSERT INTO Product VALUES(104, "Tablet", 4000, 250)
GO
CREATE TABLE ProductSales
(
  ProductSalesId INT PRIMARY KEY,
  ProductId INT,
  QuantitySold INT
) 
GO
INSERT INTO ProductSales VALUES(1, 101, 10)
INSERT INTO ProductSales VALUES(2, 102, 15)
INSERT INTO ProductSales VALUES(3, 103, 30)
INSERT INTO ProductSales VALUES(4, 104, 35)
GO

SQL Server 中事務的原子性

SQL Server 中事務的原子性確保事務中的所有 DML 語句(即插入、更新、刪除)成功完成或全部回滾。例如,在以下 spSellProduct 存儲過程中,UPDATE 和 INSERT 語句都應該成功。如果 UPDATE 語句成功而 INSERT 語句失敗,數據庫應該通過回滾來撤消 UPDATE 語句所做的更改。

IF OBJECT_ID("spSellProduct","P") IS NOT NULL
    DROP PROCEDURE spSellProduct
GO
CREATE PROCEDURE spSellProduct
@ProductID INT,
@QuantityToSell INT
AS
BEGIN
  
  -- 首先我們需要檢查待銷售產品的可用庫存
  DECLARE @StockAvailable INT
  SELECT @StockAvailable = Quantity FROM Product WHERE ProductId = @ProductId

  --如果可用庫存小于要銷售的數量,拋出錯誤
  IF(@StockAvailable < @QuantityToSell)
  BEGIN
    Raiserror("可用庫存不足",16,1)
  END

  -- 如果可用庫存充足
  ELSE
  BEGIN
    BEGIN TRY
      -- 我們需要開啟一個事務
      BEGIN TRANSACTION

      -- 首先做減庫存操作
      UPDATE Product SET Quantity = (Quantity - @QuantityToSell) WHERE ProductID = @ProductID

      -- 計算當前最大的產品銷售ID,即 MaxProductSalesId
      DECLARE @MaxProductSalesId INT
      SELECT @MaxProductSalesId = CASE 
  WHEN MAX(ProductSalesId) IS NULL THEN 0 
  ELSE MAX(ProductSalesId) 
  END 
      FROM ProductSales

      -- 把 @MaxProductSalesId 加一, 所以我們會避免主鍵沖突 
      --(解釋下,建表的時候,沒有設置主鍵自增,所以需要人工處理自增)
      Set @MaxProductSalesId = @MaxProductSalesId + 1

      -- 把銷售的產品數量記錄到ProductSales表中
      INSERT INTO ProductSales VALUES (@MaxProductSalesId, @ProductId, @QuantityToSell)

      -- 最后,提交事務
      COMMIT TRANSACTION
    END TRY

    BEGIN CATCH
      -- 如果發生了異常,回滾事務
      ROLLBACK TRANSACTION
    END CATCH

  End
END

SQL Server 中事務的一致性

SQL Server 中事務的一致性確保數據庫數據在事務開始之前處于一致狀態,并且在事務完成后也使數據保持一致狀態。如果事務違反規則,則應回滾。例如,如果可用庫存從 Product 表中減少,那么 ProductSales 表中必須有一個相關條目。

在我們的示例中,假設事務更新了 product 表中的可用數量,突然出現系統故障(就在插入 ProductSales 表之前或中間)。在這種情況下系統會回滾更新,否則我們無法追蹤庫存信息。

SQL Server 中事務的隔離性

SQL Server 中事務的隔離性確保事務的中間狀態對其他事務不可見。一個事務所做的數據修改必須與所有其他事務所做的數據修改隔離。大多數數據庫使用鎖定來維護事務隔離。

為了理解事務的隔離性,我們將使用兩個獨立的 SQL Server 事務。從第一個事務開始,我們啟動了事務并更新了 Product 表中的記錄,但我們還沒有提交或回滾事務。在第二個事務中,我們使用 select 語句來選擇 Product 表中存在的記錄,如下所示。

在sqlserver management studio 或 Navicat 中新建兩個獨立的查詢窗口

首先在第1個窗口運行以下事務,更新庫存(注意事務沒有提交或回滾,回滾語句被注釋了)

begin tran
update dbo.Product set Quantity = 150 where ProductID = 101
--rollback tran

然后在第2個窗口運行以下語句,查詢被更新的產品

select * from dbo.Product where ProductID = 101

你會發現,第2個窗口中的查詢語句被阻塞了(一直處于運行狀態,沒有返回數據)

解決阻塞: 切換到第1個窗口, (按下鼠標左鍵拖動選擇 rollback tran ,注意不包含注釋 -- ),
然后單獨執行這個語句, 在 sqlserver management studio 直接點擊執行就行, 在 Navicat 中,點擊運行按鈕右邊的下拉箭頭,點擊運行已選擇的,好了,再切換到第2個窗口,你會發現結果出來了

阻塞的原因: SqlServer默認的事務隔離級別是 Read Committed,
在上述的Update語句執行時會在對應的數據行上加一個 排它鎖(X), 直到事務提交或者回滾才會釋放,這保證了在此期間,其他任何事務都不能操作此行數據(查詢也不行),因為排它鎖(也叫獨占鎖),和其他類型的鎖都是不兼容的,這保證了其他事務看不到另一個事務的中間狀態,即避免了臟讀

SQL Server 中事務的持久性

SQL Server 中事務的持久性確保一旦事務成功完成,它對數據庫所做的更改將是永久性的。即使出現系統故障或電源故障或任何異常變化,它也應該保護已提交的數據。

注意:首字母縮寫詞 ACID 由 Andreas Reuter 和 Theo Härder 在 1983 年創建,然而,Jim Gray 在 1970 年代后期已經定義了這些屬性。大多數流行的數據庫,如 SQL Server、Oracle、MySQL、Postgre SQL 默認都遵循 ACID 屬性。

到此這篇關于SQL Server 中的 ACID 屬性的文章就介紹到這了,更多相關SQL Server ACID內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: MsSQL
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品国产精品久久一区免费式 | 丝袜亚洲精品中文字幕一区| 欧美aa一级| 蜜桃精品在线| 国产不卡精品在线| 中文字幕在线视频久| 亚洲午夜天堂| 久久久成人网| 欧美91福利在线观看| 欧美在线亚洲综合一区| 免费不卡在线观看| 日韩国产精品久久久久久亚洲| 欧美在线不卡| 麻豆精品一区二区综合av| 中文在线免费视频| 久久天堂精品| 99国内精品| 亚洲91在线| 久久中文字幕导航| 成人国产精品一区二区免费麻豆| 国产盗摄——sm在线视频| 中文字幕系列一区| 午夜精品网站| 亚洲另类视频| 国产极品一区| 97se综合| 丝袜国产日韩另类美女| 日本久久二区| 精品一区二区三区在线观看视频| 日本在线精品| 美美哒免费高清在线观看视频一区二区| 久久亚洲一区| 国产无遮挡裸体免费久久| 91视频一区| 夜夜精品视频| 日韩国产在线一| 国产精品精品国产一区二区| 欧洲激情综合| 欧美一区二区三区久久| 福利片在线一区二区| 黄色日韩在线| 国产日产一区| 久久蜜桃精品| 日韩福利在线观看| 日韩综合精品| 一区二区三区四区精品视频| 久久精品国产精品亚洲毛片| 欧美在线影院| 国产精品.xx视频.xxtv| 久久精品亚洲人成影院| 综合激情在线| 国产中文在线播放| 免费视频一区二区| 精品亚洲成人| 在线亚洲一区| 精品久久视频| 久久国产成人| 成人国产综合| 日本在线视频一区二区| 亚洲天堂久久| 国产精品亚洲人成在99www | 久久一区二区中文字幕| 一区二区三区四区日韩| 国产videos久久| 亚洲婷婷丁香| 久久精品国产亚洲夜色av网站| 欧美一区不卡| 国产手机视频一区二区| 久久伊人国产| 亚洲青青久久| 久久精品91| 精品丝袜久久| 蜜桃视频一区二区| 性感美女一区二区在线观看| 欧美天堂一区二区| 激情综合网址| 国产一区二区三区四区五区| 香蕉成人久久| 日韩国产综合| 国产精品久久久久久妇女| 精品一区三区| 日韩在线短视频| 欧美1区2区3| 日本中文字幕一区二区视频| 狠狠操综合网| 中文字幕在线高清| 麻豆成人91精品二区三区| 亚洲我射av| 免费精品国产| a天堂资源在线| 欧美激情福利| 日韩三区四区| 亚洲黄色影院| 精品欧美一区二区三区在线观看| 麻豆视频一区二区| 日本麻豆一区二区三区视频| 亚洲欧美久久久| 免费不卡中文字幕在线| www在线观看黄色| 国产劲爆久久| 国产精品一卡| 欧美日韩亚洲一区二区三区在线| 爽爽淫人综合网网站| 日韩福利一区| av在线最新| 水蜜桃精品av一区二区| 久久99视频| 国产精品一区二区美女视频免费看| 中文字幕日本一区二区| 性欧美精品高清| 在线 亚洲欧美在线综合一区| 蜜臀久久99精品久久一区二区 | 日本久久二区| 中文字幕亚洲在线观看| 视频一区国产视频| 三级欧美韩日大片在线看| 亚洲女同一区| 午夜国产一区二区| 久久国产亚洲精品| 亚洲www啪成人一区二区| 麻豆精品视频在线| 欧美精品不卡| 久久精品资源| 成人影视亚洲图片在线| 91亚洲国产高清| 国产在线|日韩| 欧美精品高清| 99久久亚洲精品蜜臀| 久久青草久久| 1024精品久久久久久久久| 亚洲精品一区二区妖精| 美女网站久久| 蜜臀av性久久久久蜜臀aⅴ四虎| 免费观看在线色综合| 亚洲精选久久| 亚洲精品综合| 久久久9色精品国产一区二区三区| 亚洲女同中文字幕| 好看的av在线不卡观看| 亚洲在线观看| 亚洲1区在线| 欧美日韩亚洲一区二区三区在线| 国产精品2区| 国产一区不卡| 欧美丝袜一区| 四虎成人精品一区二区免费网站| 亚洲理论在线| 国产精品主播| 国产精品国产三级国产在线观看| 日韩精品电影| 成人午夜国产| 男女性色大片免费观看一区二区| 久久国产人妖系列| 高清精品久久| 欧美日韩精品一本二本三本 | 亚洲中午字幕| 日韩和欧美的一区| 精品久久美女| 久久国产影院| 亚洲一级大片| 精品国产精品国产偷麻豆| 国产高清不卡| 视频一区视频二区中文字幕| 国产精品sss在线观看av| 欧美日韩精品免费观看视欧美高清免费大片| 亚洲国产不卡| 国产丝袜一区| 999久久久91| 亚欧洲精品视频在线观看| 精品午夜视频| 亚洲免费成人| 国产精品sm| 91精品高清| 国产精品亚洲片在线播放| 国内亚洲精品| 日韩高清不卡在线| 日韩国产一区| 色8久久久久| 黄色在线网站噜噜噜| 亚洲影院天堂中文av色| 国产伊人久久| 丝袜美腿亚洲色图| 丰满少妇一区| 日本欧美在线看| 高清av一区| 亚欧洲精品视频在线观看| 日韩一区二区在线免费| 日本欧美韩国一区三区| 日本美女一区| 日本成人在线网站| 久久视频精品| 日本强好片久久久久久aaa| 91精品久久久久久久久久不卡| 欧美片网站免费| 午夜欧美精品| 国产中文欧美日韩在线| 麻豆成人在线| 日韩精品永久网址| 国产日韩精品视频一区二区三区| 亚洲一级高清|