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

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

詳解SQL Server 中的 ACID 屬性

瀏覽:263日期: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久久,三上悠亚国产精品一区二区三区
超级白嫩亚洲国产第一| 中文精品视频| 国产日韩电影| 狠狠爱成人网| 国产欧美一区二区精品久久久 | 精品91福利视频| 久久精品99久久无色码中文字幕| 亚洲va在线| 欧美日韩1区2区3区| 日本aⅴ免费视频一区二区三区| 国产伦乱精品| 日韩午夜电影| 久久亚洲影院| 日韩精品91| 日韩综合一区二区| 91欧美在线| 亚洲一级大片| 日韩欧美中文在线观看| 精品福利久久久| 欧美午夜精品一区二区三区电影| 亚洲激情偷拍| 国产一区二区三区四区大秀 | 性色一区二区| 日本精品久久| 亚洲二区视频| 精品免费视频| 免费在线看一区| 99热精品久久| 美女福利一区二区三区| 欧美一级二级视频| 综合国产视频| 亚洲ww精品| 国产精品av一区二区| 青草国产精品| 99精品美女| 丁香婷婷久久| 尤物tv在线精品| 中文字幕人成乱码在线观看 | 色婷婷综合网| 久久香蕉网站| 天堂久久一区| 日本在线一区二区三区| 青青在线精品| 蜜臀久久久99精品久久久久久| 一区久久精品| 日韩欧美另类一区二区| 成午夜精品一区二区三区软件| 久久av综合| 97精品国产一区二区三区| 久久精品国产网站| 日韩一区中文| 久久精品影视| 狠狠久久婷婷| 精品亚洲精品| 中文在线а√在线8| 国产探花一区在线观看| 久久影院资源站| 91偷拍一区二区三区精品| 91综合网人人| 精品国产乱码久久久久久1区2匹| 久久国产日韩| 国产精品社区| 91欧美国产| 2023国产精品久久久精品双| 精品国产黄a∨片高清在线| 久久av国产紧身裤| 蜜桃精品视频| 久久婷婷一区| 欧美日韩亚洲三区| 激情欧美一区二区三区| 国产调教一区二区三区| 福利一区视频| 亚洲久久一区| 亚洲黄色影院| 国产精品一级| 午夜一级在线看亚洲| 欧美精品91| 亚洲人成在线影院| 日日夜夜免费精品| 超碰成人av| 欧美女激情福利| 欧美国产专区| 国产日韩一区二区三免费高清| 伊人久久大香线蕉av超碰演员| 亚洲区欧美区| 国产美女精品视频免费播放软件| 国产一区日韩一区| 日本午夜精品久久久| 国产一区二区三区不卡视频网站| 国产一级一区二区| 综合亚洲视频| 免费成人性网站| 欧美专区在线| 蜜桃一区二区三区| 麻豆国产欧美一区二区三区| 欧美freesex黑人又粗又大| 日韩欧美不卡| 日韩一区电影| 激情欧美丁香| 视频一区二区三区入口| jiujiure精品视频播放| 欧美美女一区| 欧美自拍一区| 国产精品久久久久久久久久妞妞 | 亚洲性色av| 国产一区不卡| 精品一区视频| 久久久久久黄| 国产农村妇女精品一区二区| 精品国产a一区二区三区v免费| 国产高清日韩| 国产成人久久精品麻豆二区| 午夜视频精品| 亚洲日产国产精品| 国产精品啊v在线| 国产精品亚洲人成在99www| 麻豆精品99| 日本一二区不卡| 日本在线高清| 亚洲高清av| 一区二区三区午夜视频| 日韩1区2区日韩1区2区| 国产成人精品一区二区免费看京| 亚洲特色特黄| 国产精品一区二区精品| 免费国产亚洲视频| 免费观看久久av| 亚洲综合在线电影| 伊人久久视频| 日韩精品国产精品| 欧美久久精品一级c片| 色婷婷亚洲mv天堂mv在影片| 久久99高清| 麻豆91精品视频| 中文字幕日韩亚洲| 午夜视频精品| 日本欧美韩国一区三区| 日韩国产一区二区| 久久蜜桃精品| 在线观看精品| 日韩久久精品| 日韩午夜一区| 日韩二区在线观看| 日本不卡高清| 精品网站999| 国产精品一区二区三区www| 国产伦理久久久久久妇女| 国产伦一区二区三区| 国产精品成人一区二区不卡| 麻豆网站免费在线观看| 亚洲一区二区三区无吗| 中文日韩欧美| 国产精品一区二区三区美女| 久久久久免费| 伊人国产精品| 亚洲午夜一级| 日本综合精品一区| 日韩欧美一区二区三区在线视频| 欧美日韩水蜜桃| 欧美私人啪啪vps| 日韩一区二区三区免费| 亚洲精品在线二区| 精品99久久| 亚洲欧美久久| 久久99蜜桃| 中文字幕免费精品| 日本精品不卡| 日韩精品社区| 国产欧美高清| 久久久久九九精品影院| 五月婷婷六月综合| 国产精品免费大片| 宅男在线一区| 国产a亚洲精品| 久久精品av麻豆的观看方式| 热三久草你在线| 国产日韩一区二区三区在线播放| 天堂网在线观看国产精品| 成人va天堂| 日韩精品一级| 国产精品tv| 久久亚洲视频| 日韩视频精品在线观看| 精品福利久久久| 给我免费播放日韩视频| 日韩国产一二三区| 国产亚洲毛片| 在线视频精品| 视频一区中文字幕| 国产高清久久| 亚洲激情久久| 国产精品视区| 欧美.日韩.国产.一区.二区 | 国产视频一区欧美| 欧美激情aⅴ一区二区三区| 亚洲一区有码| 美女亚洲一区| 蜜桃视频一区二区| 欧美日韩国产高清电影| 日韩中文首页|