MySQL學習之基礎篇09-事務

来源:https://www.cnblogs.com/wanghaoyu666/archive/2019/08/05/11301640.html
-Advertisement-
Play Games

我們在建表的時候通常會在最後聲明引擎類型,這次我們就來看看存儲引擎都有哪些: 舉個例子: 銀行轉賬: 張三想給李四轉500元錢: 張三-500 李四+500 這兩步必須都完成,轉賬才完成 像這種,2步或N步必須都完成,從邏輯上講,是一個‘原子操作’,即要麼成功,要麼都不成功 那麼如何保障這種特性? ...


我們在建表的時候通常會在最後聲明引擎類型,這次我們就來看看存儲引擎都有哪些:

舉個例子:

---------------------------

銀行轉賬:

張三想給李四轉500元錢:

張三-500

李四+500

這兩步必須都完成,轉賬才完成

---------------------------

像這種,2步或N步必須都完成,從邏輯上講,是一個‘原子操作’,即要麼成功,要麼都不成功

那麼如何保障這種特性?

答:事務

我們先建兩張不同引擎的表,分別是b1,b2:

插入數據:

我們來體現innodb引擎具有的事務特性:

開啟事務,體現事務的原子特性:

start transaction;

先給張三減500:

update b2 set money=money-500 where uname='zhangsan';

然後我們故意寫錯語句來模擬轉賬時出現網路故障等失敗場景:

轉賬必須一個-500,一個+500,這樣才成立,那麼只有一個-500,另一個+500是失敗的操作,那麼我們就要進行回滾:

rollback;

事務有四種特性,上面我們演示的是原子性,它還有一致性,隔離性,永久性;以下知識摘自百度百科:

原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做。

一致性(consistency)。事務必須是使資料庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。

隔離性(isolation)。一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對併發的其他事務是隔離的,併發執行的各個事務之間不能互相干擾。

持久性(durability)。持久性也稱永久性(permanence),指一個事務一旦提交,它對資料庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。

持久性:

是指事務一旦完成,無法撤銷

事務不能撤銷,但確實出現了一次錯誤的交易,應該怎麼辦?

答:只能再做一次“補償性事務”

接下來我們演示它的隔離性:

還是轉賬操作,我們用黑色模擬櫃臺,用紅色來模擬ATM機

讓李四給張三轉500,(那麼應該就是張三的錢+500,李四的錢-500.

我們先給張三+500

我們可以看到在櫃臺這邊張三的錢已經加了500,那麼看看ATM機那邊的情況:

我們可以看到這邊沒有任何變化;

然後讓李四-500:

可以看到ATM機這邊還是沒有任何變化。

 然後我們結束事務:

這時我們再看ATM機那邊的情況:

可以看得到這邊的錢數目終於發生了變化。

 以上就是我簡單的為大家演示的事務的隔離性。

 


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

-Advertisement-
Play Games
更多相關文章
  • 前言 大概幾個月之前項目中用到事務,需要保證數據的強一致性,期間也用到了mysql的鎖,但當時對mysql的鎖機制只是管中窺豹,所以本文打算總結一下mysql的鎖機制。 本文主要論述關於mysql鎖機制,mysql版本為5.7,引擎為innodb,由於實際中關於innodb鎖相關的知識及加鎖方式很多 ...
  • 概述 以 Hortonworks Data Platform (HDP) 平臺為例 ,hadoop大數據平臺的安全機制包括以下兩個方面: 身份認證 即核實一個使用者的真實身份,一個使用者來使用大數據引擎平臺,這個使用者需要表明自己是誰,即提供自己的身份證明,大數據平臺需要檢驗這個證明,確定這個證明是 ...
  • title: redis login limitation <! more 利用 redis 實現登陸次數限制, 註解 + aop, 核心代碼很簡單. 基本思路 比如希望達到的要求是這樣: 在 1min 內登陸異常次數達到5次, 鎖定該用戶 1h 那麼登陸請求的參數中, 會有一個參數唯一標識一個 u ...
  • Hadoop Shuffer     Hadoop 的shuffer主要分為兩個階段:Map、Reduce。 Map Shuffer:     這個階段發生在map階段之後,數據寫入記憶體之前,在數據寫入記憶體的過程就已經開 ...
  • mysql中的範式 範式 範式:Normal Format,是一種離散數學中的知識,是為瞭解決數據的存儲與優化的問題:保存數據的存儲之後,凡是能夠通過關係尋找出來的數據,堅決不再重覆存儲,終極目標是為了減少數據的冗餘。範式:是一種分層結構的規範,分為六層,每一層都比上一層更加嚴格,若要滿足下一層範式 ...
  • 講乾貨,不啰嗦,本教程主要基於Mysql資料庫,講解sql的基本使用。 資料庫主要包括增、刪、改、查等基本操作,以下為設計到的常用的sql語句: 一、查 1.select 語法查詢 SELECT column_name,column_name FROM table_name 其中column_nam ...
  • 10分鐘搞懂:億級用戶的分散式數據存儲解決方案https://www.cnblogs.com/lagou/p/11011682.html ...
  • 1.啟動hadoop之前,ssh免密登錄slave主機正常,使用命令start-all.sh啟動hadoop時,需要輸入slave主機的密碼,說明ssh文件許可權有問題,需要執行以下操作: 1)進入.ssh目錄下查看是否有公鑰私鑰文件authorized_keys、id_rsa、id_rsa.pub ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...