SQL server中事務的四個屬性特征(ACID)

来源:http://www.cnblogs.com/Mryang-blog-cn/archive/2017/04/03/SQLserverSHIWU.html
-Advertisement-
Play Games

事務的概念、類型和四個特征(ACID). 1.事務(Transaction)是併發控制的單位,是用戶定義的一個操作序列。這些操作要麼都做,要麼都不做,是一個不可分割的工作單位。 通過事務,SQL Server能將邏輯相關的一組操作綁定在一起,以便伺服器保持數據的完整性。 2.事務通常是以BEGIN ...


事務的概念、類型和四個特征(ACID).


1.事務(Transaction)是併發控制的單位,是用戶定義的一個操作序列。這些操作要麼都做,要麼都不做,是一個不可分割的工作單位。 
通過事務,SQL Server能將邏輯相關的一組操作綁定在一起,以便伺服器保持數據的完整性。


2.事務通常是以BEGIN TRANSACTION開始,以COMMIT或ROLLBACK結束。

    COMMIT表示提交,即提交事務的所有操作。具體地說就是將事務中所有對資料庫的更新寫回到磁碟上的物理資料庫中去,事務正常結束。

    ROLLBACK表示回滾,即在事務運行的過程中發生了某種故障,事務不能繼續進行,系統將事務中對資料庫的所有以完成的操作全部撤消,滾回到事務開始的狀態。

3.事務類型

    A:手動事務
            手動事務允許顯式處理若幹過程,這些過程包括:開始事務、控制事務邊界內的每個連接和資源登記、確定事務結果(提交或中止)以及結束事務。
            儘管此模型提供了對事務的標準控制,但它缺少一些內置於自動事務模型的簡化操作。例如,在手動事務中數據存儲區之間沒有自動登記和協調。
            此外,與自動事務不同,手動事務中事務不在對象間流動。
            如果選擇手動控制分散式事務,則必須管理恢復、併發、安全性和完整性。也就是說,必須應用維護與事務處理關聯的 ACID 屬性所需的所有編程方法。

    B:自動事務
            .NET 頁、XML Web services方法或 .NET Framework 類一旦被標記為參與事務,它們將自動在事務範圍內執行。
            您可以通過在頁、XML Web services 方法或類中設置一個事務屬性值來控制對象的事務行為。特性值反過來確定實例化對象的事務性行為。
            因此,根據聲明特性值的不同,對象將自動參與現有事務或正在進行的事務,成為新事務的根或者根本不參與事務。
            聲明事務屬性的語法在 .NET Framework 類、.NET 頁和 XML Web services 方法中稍有不同。
            聲明性事務特性指定對象如何參與事務,如何以編程方式被配置。
            儘管此聲明性級別表示事務的邏輯,但它是一個已從物理事務中移除的步驟。
            物理事務在事務性對象訪問資料庫或消息隊列這樣的數據資源時發生。
            與對象關聯的事務自動流向合適的資源管理器,諸如 OLE DB、開放式資料庫連接 (ODBC) 或 ActiveX 數據對象 (ADO) 的關聯驅動程式在對象的上下文中查找事務,
            並通過分散式事務處理協調器 (DTC) 在此事務中登記。整個物理事務自動發生。

4.事務的特性(ACID特性)

    A:原子性(Atomicity)
    事務是資料庫的邏輯工作單位,事務中包括的諸操作要麼全做,要麼全不做。
    事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。

    B:一致性(Consistency)
    事務執行的結果必須是使資料庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
    一個事務可以封裝狀態改變(除非它是一個只讀的)。事務必須始終保持系統處於一致的狀態,不管在任何給定的時間併發事務有多少。
    也就是說:如果事務是併發多個,系統也必須如同串列事務一樣操作。其主要特征是保護性和不變性(Preserving an Invariant).
    以轉賬案例為例,假設有五個賬戶,每個賬戶餘額是100元,那麼五個賬戶總額是500元,如果在這個5個賬戶之間同時發生多個轉賬,無論併發多少個,
    比如在A與B賬戶之間轉賬5元,在C與D賬戶之間轉賬10元,在B與E之間轉賬15元,五個賬戶總額也應該還是500元,這就是保護性和不變性.

    C:隔離性(Isolation)
    一個事務的執行不能被其他事務干擾。隔離狀態執行事務,使它們好像是系統在給定時間內執行的唯一操作。如果有兩個事務,運行在相同的時間內,
    執行相同的功能,事務的隔離性將確保每一事務在系統中認為只有該事務在使用系統。這種屬性有時稱為串列化,為了防止事務操作間的混淆,
    必須串列化或序列化請求,使得在同一時間僅有一個請求用於同一數據。

    D:持續性/永久性(Durability)
        一個事務一旦提交,它對資料庫中數據的改變就應該是永久性的,不會被回滾。

5.例子:

    A:比如說在網上轉帳從A賬戶往B賬戶轉100元,需要執行兩個操作A賬戶減少100元,B賬戶增加100元。
    這兩個操作如果只執行了第一個操作,那麼你是不會答應的,因為你損失了100元,而如果只執行了第二個操作,那麼銀行也不會答應。
    這兩個操作要麼都同時執行成功,要麼都執行失敗,否則一個成功,一個失敗都是不合理的。
    因此將這兩個操作放在一個事務中去執行,事務的原子性,保證了要麼都執行,要麼都不執行。

    B:一致性的話,再舉個例子,比如說你刷卡買電影票,步驟是這樣的,首先營業員先給你打出一張票,然後你刷卡,拿電影票。
    這個時候,實際的電影票是資源,而資料庫中的電影票是數據。營業員如果幫你打出一張票,這個時候,資料庫中電影票實際上數目減一了,
    但是如果你刷卡失敗了,實際的電影票資源並沒有發生改變,這個時候執行回滾操作,恢復到打票之前的數據。這樣保證了資源和數據的一致性。

    C:隔離性的話,就是兩個事務之間的操作相互之間不會影響,即不會發生臟讀、不可重覆讀和幻象。

    D:持久性的話比較好理解,就是事務執行成功以後,數據將保存在資料庫中不再發生改變。

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

-Advertisement-
Play Games
更多相關文章
  • 2017-04-02 鍵 類型 值 說明 Localization native development region String China/Canada/Japan/United State等 本地化,設成相應的值後,App中的顯示語言等信息變為相應國家的語言 Bundle display n ...
  • mysql主從複製原理 1)在mysql主庫上,將改變記錄到二進位日誌(binary log)中。 2)在mysql從庫上,IO線程將mysql主庫上二進位日誌(binary log)複製到中繼日誌(replay log)中。mysql從庫上開啟1個IO線程,併在mysql主庫上打開一個連接,然後開 ...
  • use mysql;/*創建原始數據表*/DROP TABLE IF EXISTS `articleinfo`;CREATE TABLE `articleinfo`(`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,`title` VA ...
  • 搜了一大堆做個總結,以下是Sql Server中的方法,備忘下 1,利用sysobjects系統表 在這個表中,在資料庫中創建的每個對象(例如約束、預設值、日誌、規則以及存儲過程)都有對應一行,我們在該表中篩選出xtype等於U的所有記錄,就為資料庫中的表了。 示例語句如下:: select * f ...
  • /*定義變數方式1:set @變數名=值;方式2:select 值 into @變數名;方式3:declare 變數名 類型(字元串類型加範圍) default 值; in參數 入參的值會僅在存儲過程中起作用out參數 入參的值會被置為空,存儲中計算的值會影響外面引用該變數的值inout參數 入參的 ...
  • 單鏈表之一元多項式求和 一元多項式求和單鏈表實現偽代碼1、工作指針 pre、p、qre、q 初始化2、while(p 存在且 q 存在)執行下列三種情況之一: 2.1、若 p->exp < q->exp:指針 p 後移; 2.2、若 p->exp > q->exp,則 2.2.1、將結點 q 插到結 ...
  • HDFS本身並沒有提供用戶名、組等的創建和管理,在客戶端操作Hadoop時,Hadoop自動識別執行命令所在的進程的用戶名和用戶組,然後檢查是否具有許可權。啟動Hadoop的用戶即為超級用戶,可以進行所有操作。 由於想在Windows 7的Eclipse裡面操作Hadoop,Windows 7的用戶是 ...
  • SQL 大數據查詢如何進行優化? 1.對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索 2.應儘量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:引。 select id from t wher ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...