徹底理解數據庫事物

事務

事務(Transaction),一般是指要做的或所做的事情。在計算機術語中是指訪問并可能更新數據庫中各種數據項的一個程序執行單元(unit)。在計算機術語中,事務通常就是指數據庫事務。

概念

一個數據庫事務通常包含對數據庫進行讀或寫的一個操作序列。它的存在包含有以下兩個目的:

1、為數據庫操作提供了一個從失敗中恢復到正常狀態的方法,同時提供了數據庫即使在異常狀態下仍能保持一致性的方法。
2、當多個應用程序在并發訪問數據庫時,可以在這些應用程序之間提供一個隔離方法,以防止彼此的操作互相干擾。

當一個事務被提交給了DBMS(數據庫管理系統),則DBMS需要確保該事務中的所有操作都成功完成且其結果被永久保存在數據庫中,如果事務中有的操作沒有成功完成,則事務中的所有操作都需要被回滾,回到事務執行前的狀態(要么全執行,要么全都不執行);同時,該事務對數據庫或者其他事務的執行無影響,所有的事務都好像在獨立的運行。

但在現實情況下,失敗的風險很高。在一個數據庫事務的執行過程中,有可能會遇上事務操作失敗、數據庫系統/操作系統失敗,甚至是存儲介質失敗等情況。這便需要DBMS對一個執行失敗的事務執行恢復操作,將其數據庫狀態恢復到一致狀態(數據的一致性得到保證的狀態)。為了實現將數據庫狀態恢復到一致狀態的功能,DBMS通常需要維護事務日志以追蹤事務中所有影響數據庫數據的操作。

特性

并非任意的對數據庫的操作序列都是數據庫事務。事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。

原子性(Atomicity):事務作為一個整體被執行,包含在其中的對數據庫的操作要么全部被執行,要么都不執行。
一致性(Consistency):事務應確保數據庫的狀態從一個一致狀態轉變為另一個一致狀態。一致狀態的含義是數據庫中的數據應滿足完整性約束。
隔離性(Isolation):多個事務并發執行時,一個事務的執行不應影響其他事務的執行。
持久性(Durability):一個事務一旦提交,他對數據庫的修改應該永久保存在數據庫中。

舉例

用一個常用的“A賬戶向B賬號匯錢”的例子來說明如何通過數據庫事務保證數據的準確性和完整性。熟悉關系型數據庫事務的都知道從帳號A到帳號B需要6個操作:

1、從A賬號中把余額讀出來(500)。
2、對A賬號做減法操作(500-100)。
3、把結果寫回A賬號中(400)。
4、從B賬號中把余額讀出來(500)。
5、對B賬號做加法操作(500+100)。
6、把結果寫回B賬號中(600)。

原子性:

保證1-6所有過程要么都執行,要么都不執行。一旦在執行某一步驟的過程中發生問題,就需要執行回滾操作。 假如執行到第五步的時候,B賬戶突然不可用(比如被注銷),那么之前的所有操作都應該回滾到執行事務之前的狀態。

一致性

在轉賬之前,A和B的賬戶中共有500+500=1000元錢。在轉賬之后,A和B的賬戶中共有400+600=1000元。也就是說,數據的狀態在執行該事務操作之后從一個狀態改變到了另外一個狀態。同時一致性還能保證賬戶余額不會變成負數等。

隔離性

在A向B轉賬的整個過程中,只要事務還沒有提交(commit),查詢A賬戶和B賬戶的時候,兩個賬戶里面的錢的數量都不會有變化。
如果在A給B轉賬的同時,有另外一個事務執行了C給B轉賬的操作,那么當兩個事務都結束的時候,B賬戶里面的錢應該是A轉給B的錢加上C轉給B的錢再加上自己原有的錢。

持久性

一旦轉賬成功(事務提交),兩個賬戶的里面的錢就會真的發生變化(會把數據寫入數據庫做持久化保存)!

原子性與隔離行

一致性與原子性是密切相關的,原子性的破壞可能導致數據庫的不一致,數據的一致性問題并不都和原子性有關。
比如剛剛的例子,在第五步的時候,對B賬戶做加法時只加了50元。那么該過程可以符合原子性,但是數據的一致性就出現了問題。

因此,事務的原子性與一致性缺一不可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278594.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278594.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278594.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HttpRunner自動化框架學習筆記

一.簡單介紹 HttpRunner 是一款面向 HTTP(S) 協議的通用測試框架,只需編寫維護一份 YAML/JSON 腳本,即可實現自動化測試、性能測試、線上監控、持續集成等多種測試需求。 支持python2和python3 二.框架特點 繼承 Requests 的全部特性,輕松實現…

如何在Chrome中為Gmail啟用桌面通知

Last year Google rolled out desktop notifications for Google Calendar, now you can get Gmail and Gchat notifications on your desktop too. Read on as we walk you through configuring them both. 去年Google推出了Google日歷的桌面通知,現在您也可以在桌…

vue集成iconfont、fontawesome和圖標選擇器(含fontawesome、el-icon和加入的iconfont)

目錄(一)引入iconfont字體圖標庫將圖標加入購物車新建(添加至)項目下載后項目中引入(二)引入fontawesome(三)圖標選擇器效果圖結構使用源碼(一)引入iconfont字…

java之Synchronize

2019獨角獸企業重金招聘Python工程師標準>>> 實現原理:JVM 是通過進入、退出對象監視器( Monitor )來實現對方法、同步塊的同步的。 具體實現是在編譯之后在同步方法調用前加入一個 monitor.enter 指令,在退出方法和異常處插入 monitor.exit …

pop()方法

pop()方法 描述 列表 pop() 方法通過指定元素的索引值來移除列表中的某個元素(默認是最后一個元素),并且返回該元素的值,如果列表為空或者索引值超出范圍會報一個異常。 語法 pop() 方法語法: L.pop([index-1]) 參數 i…

vue引入postcss-plugin-px2rem,px轉rem

npm install --save-dev postcss-plugin-px2remvue.config.js module.exports {css: {loaderOptions: {postcss: {plugins: [require(postcss-plugin-px2rem)({rootValue: 16, //換算基數, 默認100 ,1 / fontsize(html) x 原來的1px轉為0.0625rem// …

HikariCP連接池配置

2019獨角獸企業重金招聘Python工程師標準>>> HikariCP號稱性能最好的Java數據庫連接池。雖沒做過親測但是公司項目一直在用,大概經歷過2萬左右用戶同時在線,鏈接池性能方面未出現問題。 官網:http://brettwooldridge.github.io/Hi…

Microsoft Desktop Player是IT Pro的寶貴工具

If you are an IT Professional, a new education tool introduced by Microsoft is the MS Desktop Player. Today we take a look at what it has to offer, from Webcasts, White Papers, Training Videos, and more. 如果您是IT專業人員,則Microsoft推出的新的培…

如何在Microsoft Excel中將文本轉換為日期值

Analysis of business data often requires working with date values in Excel to answer questions such as “how much money did we make today” or “how does this compare to the same day last week?” And that can be hard when Excel doesn’t recognize the valu…

git針對已有倉庫或已有文件的初始化操作

git全局配置用戶 git config --global user.name “xxx” git config --global user.email “xxx.cn” 情況1、存在git倉庫 git clone url.git //cd xx //touch README.md //git add README.md //git commit -m "add README" //git push -u origin master情況2、已…

策略模式-Golang實現

目的:根據不同策略來執行對象的相應操作 和工廠模式很像,不同點在于: 工廠模式是傳入參數后創建對象,根據傳入的參數寫邏輯來判斷應該創建什么類型的對象,模式的使用者調用對象統一的方法操作。 策略模式是模式的使用者…

看著手機會讓您暈眩嗎? 禁用動畫

Giulio_Fornasar/ShutterstockGiulio_Fornasar /快門Are your phone’s buttery-smooth animations causing motion sickness, eyestrain, or even slow app performance? Those animations are just for looks, and you can disable a lot of them on both iPhone and Androi…

電腦的組成

一、按電腦組成分 1.CPU(中央處理器),是一塊超大規模的集成電路,有很多針腳,是電腦的核心,它是電腦進行運算和控制的核心,處理著各種信息的運算,就像人計算數學題要用頭腦運算一樣。…

【云周刊】第139期:阿里年會黑科技全揭秘:IoT手環、人臉識別驗票、大屏彈幕互動等“十八般武藝”輪番上陣...

摘要:阿里年會黑科技全揭秘:IoT手環、人臉識別驗票、大屏彈幕互動等“十八般武藝”輪番上陣,2017上半年無監督特征學習研究成果匯總,CDN最全學習教程,量子計算會帶來什么樣的革命?更多精彩技術資訊&#xf…

微信小程序之 SideBar(側欄分類)

項目目錄: 模擬數據: utils / data.js function getSData() {var data [{"id": 1,"tree": {"id": 1,"desc": "寶寶奶粉","desc2": null,"level": "level1","log…

騰訊地圖判斷點是否在區域內

鏈接添加幾何計算庫&#xff1a;librariesgeometry xxx為自己的key <script charset"utf-8" src"https://map.qq.com/api/gljs?v1.exp&keyxxx&librariesgeometry"></script>調用 TMap.geometry.isPointInPolygon(position, paths)

如何在線查找成千上萬的免費電子書

You’ve got an ebook reader (or a laptop or netbook with ebook reading software) now you just need some free books to put it to good use. Read on as we show you the best places to score free books online. 您已經有了一個電子書閱讀器(或帶有電子書閱讀軟件的筆…

【SDOI2008】儀仗隊

題面 題解 當$(x,y)$能被看到時&#xff0c;$gcd(x,y)1$&#xff0c; 所以可以求$\sum_{i0}^n\sum_{j0}^n[gcd(x,y)1]$ 或者用歐拉函數 代碼 #include<bits/stdc.h> #define RG register #define clear(x, y) memset(x, y, sizeof(x)); using namespace std;template<…

kbone-cli初始化項目,提示‘模板xx不存在’

取消git代理就好了 git config --global --unset http.proxygit config --global --unset https.proxykbone init my-app跳轉目錄 cd my-app開發小程序 npm run mp開發 Web npm run web 發布 Web npm run build恭喜你! "my-app"項目初始化成功!

Spring Bean默認配置為單實例 Spring Bean生命周期

2019獨角獸企業重金招聘Python工程師標準>>> Spring 的Bean默認的是單例的. 如果不想單例需要如下配置&#xff1a; <bean id"user" class"..." scope"singleton"/> scope"singleton"就是配置這個bean是單例的&#…