【趙強老師】資料庫的事務

来源:https://www.cnblogs.com/collen7788/archive/2020/05/06/12834796.html
-Advertisement-
Play Games

一、什麼是事務? 資料庫事務(Transaction)是訪問並可能操作各種數據項的一個資料庫操作序列,這些操作要麼全部執行,要麼全部不執行,是一個不可分割的工作單位。事務由事務開始與事務結束之間執行的全部資料庫操作組成。 例如:從A賬號給B賬號轉帳,對應於如下兩條sql語句 update from ...


一、什麼是事務?

資料庫事務(Transaction)是訪問並可能操作各種數據項的一個資料庫操作序列,這些操作要麼全部執行,要麼全部不執行,是一個不可分割的工作單位。事務由事務開始與事務結束之間執行的全部資料庫操作組成。

例如:從A賬號給B賬號轉帳,對應於如下兩條sql語句
update from account set money=money+100 where name=‘b’;
update from account set money=money-100 where name=‘a’;

這兩條update語句應該作為一個整體來運行,要保證同時成功,或者同時失敗;不應該存在一個成功,一個失敗的情況。

二、資料庫開啟事務命令

我們可以使用下麵的語句來開啟或者結束一個事務。

  • start transaction  開啟事務
  • rollback  回滾事務
  • commit   提交事務

例如,我們可以把上面的銀行轉賬的update語句放到一個事務中執行。

start transaction;
update from account set money=money+100 where name=‘b’;
update from account set money=money-100 where name=‘a’;
commit;

三、事務的特征:ACID

  • 原子性(Atomicity):原子性是指事務是一個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。
  • 一致性(Consistency):事務必須使資料庫從一個一致性狀態變換到另外一個一致性狀態。
  • 隔離性(Isolation):事務的隔離性是多個用戶併發訪問資料庫時,資料庫為每一個用戶開啟的事務,不能被其他事務的操作數據所干擾,多個併發事務之間要相互隔離。
  • 持久性(Durability):持久性是指一個事務一旦被提交,它對資料庫中數據的改變就是永久性的,接下來即使資料庫發生故障也不應該對其有任何影響。

四、事務的隔離級別

多個線程開啟各自事務操作資料庫中數據時,資料庫系統要負責隔離操作,以保證各個線程在獲取數據時的準確性。

如果不考慮隔離性,可能會引發如下問題:

  • 臟讀:指一個事務讀取了另外一個事務未提交的數據。
  • 不可重覆讀:在一個事務內讀取表中的某一行數據,多次讀取結果不同。
  • 虛讀(幻讀):是指在一個事務內讀取到了別的事務插入的數據,導致前後讀取不一致。

資料庫共定義了四種隔離級別:

  • Serializable:可避免臟讀、不可重覆讀、虛讀情況的發生。(串列化)
  • Repeatable read(MySQL的預設值):可避免臟讀、不可重覆讀情況的發生。(可重覆讀)
  • Read committed:可避免臟讀情況發生(讀已提交)。
  • Read uncommitted:最低級別,以上情況均無法保證。(讀未提交)

我們可以可以通過下麵的語句來查看MySQL的事務隔離級別和設置隔離級別:

  • set (GLOBAL|SESSION) transaction isolation level 設置事務隔離級別
  • select @@tx_isolation 查詢當前事務隔離級別

下麵的語句將查看MySQL資料庫當前的事務隔離級別。

下麵的語句將MySQL的事務隔離級別設置成read committed,在這種隔離級別下,將會發生臟讀的問題。


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

-Advertisement-
Play Games
更多相關文章
  • 最近發現了一個比較好用的代理客戶端,比較智能;名字叫clash: https://github.com/Dreamacro/clash https://github.com/yichengchen/clashX https://github.com/Fndroid/clash_for_windows ...
  • 第三天MySQL學習 :分組函數、分組查詢、連接查詢(等值連接、非等值連接、自連接) ...
  • 學習視頻:https://www.bilibili.com/video/BV1tJ411r7EC?p=75 游標cursor:用於存放多條數據的容器。需要開始open和關閉close。游標下移使用“fetch...into...”。 declare cursor myCursor is select ...
  • /* *周一作為一周的開始 *當年的1月1號所在的周算作第一周 */ CREATE function GetWeekIndexFirstDate ( @date datetime ) returns int as begin /* *計算邏輯 *1.先找出當年的1月1號@firstDate *2.計 ...
  • Kylin on HBase 方案經過長時間的發展已經比較成熟,但也存在著局限性,因此,Kyligence 推出了 Kylin on Parquet 方案。通過標準數據集測試,與仍採用 Kylin on HBase 方案的 Kylin 3.0 相比,Kylin on Parquet 的構建引擎性能有... ...
  • 一開始我就以為 oplog 應該就類似於 mysql bin-log 而事實上,確實差不多。oplog 也是用於複製集間由 Primary 記錄,Secondary 用來同步。從而保持數據一致。 最近遇到了誤刪db(刪庫不能跑路)的事情,所以,實驗了N多次的 oplog 恢複數據。 特地記錄一下,以 ...
  • 4.1 字典數據結構 typedef struct dict{ //類型特定函數 dictType *type; //私有數據 void *privateata; //哈希表 dictht ht[2]; //rehash 索引,rehash未進行時,值為-1 int rehashidx;}dict; ...
  • 表結構 student(StuId,StuName,StuAge,StuSex) 學生表 teacher(TId,Tname) 教師表 course(CId,Cname,C_TId) 課程表 sc(SId,S_CId,Score) 成績表 問題四:查詢姓“李”的老師的個數 SELECT COUNT( ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...