2023.12.7 關于 MySQL 事務詳解

目錄

事務的四大特性

原子性

一致性

持久性

隔離性

事務并發執行

臟讀

不可重復讀

幻讀

四個隔離級別?

read uncommitted

read committed

repeatable read

serializable


事務的四大特性

原子性

  • 一個事務中的所有操作,要么全部完成,要么全部不完成,不會結束在中間某個環節
  • 事務在執行過程中發生錯誤,會被回滾到事務開始前的狀態,就像這個事務從未發生過一樣

一致性

  • 指在數據庫事務執行的過程中,系統從一個一致的狀態轉移到另一個一致的狀態
  • 一致性確保了數據庫的完整性和業務規則的正確性

實例理解

  • 銀行轉賬事務
  • 如果在事務執行前,兩個賬戶的總和是 1000 元,那么在事務執行后,兩個賬戶的總和應該仍然是 1000 元
  • 這確保了在任何時刻,數據庫都處于合法、符合業務規則的狀態

持久性

  • 事務處理結束后,對數據的修改就是永久的,即便系統故障也不會丟失

注意:

  • 事務在執行的時候,會把執行的過程先記錄到硬盤上,再執行要進行的操作(該記錄不會隨著斷電而丟失)
  • 如果一個事務執行到一半 斷電了!
  • 等到下次重啟的時候,此時 mysql 就會感知到,上個事務這里執行到了中間狀態
  • 就會根據之前記錄的執行過程,進行回滾了!

隔離性

  • 數據庫允許多個并發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務并發執行時由于交叉執行而導致數據的不一致
  • 事務隔離分為不同級別,包括讀未提交、讀提交、可重復讀、串行化

事務并發執行

  • Mysql 是一個關系型數據庫管理系統,其本體為數據庫服務器,該服務器負責存儲、管理、處理數據,并提供了一套 sql?語言接口供客戶端與之交互
  • 客戶端通過連接到 Mysql 服務器,可以向服務器發送 sql?語句
  • 事務是由一組 sql 語句組成的邏輯工作單元,它要么全部執行成功,要么全部失敗回滾,事務通過執行 sql 語句來對數據庫進行讀取和更新操作
  • 在多用戶的數據庫環境中,多個客戶端可以同時連接到數據庫服務器,并發送各自的事務請求,這就是并發執行,即多個事務可以同時在數據庫中執行

  • 多個事務同時操作數據庫時可能會發生下述三種問題

臟讀

  • 臟讀發生在一個事務讀取了另一個事務還未正式提交的數據,因為存在回滾的可能性

實例理解

解決方法

  • 給正在被修改的字段加上?


不可重復讀

  • 不可重復讀發生在一個事務內的兩次讀取之間,另一個事務修改了數據,導致兩次查詢結果不一致

實例理解

解決方法

  • 給正在被查詢的字段加上?


幻讀

  • 幻讀發生在一個事務內的兩次查詢之間,另一個事務插入或刪除了數據,導致兩次查詢結果不一致

實例理解

解決方法

  • 加上讀鎖 無法解決幻讀問題,因為讀鎖僅作用于被查詢的字段,無法被其他事務修改其字段值

  • 使用串行化的方式才能解決該問題,即事務必須 串行 執行,不能 并行 執行

四個隔離級別?

  • Mysql 提供了四個隔離級別

read uncommitted

  • 對事務的并發執行不做任何限制
  • 其并發程度最高,隔離性最低
  • 會產生臟讀、不可重復讀、幻讀的問題

read committed

  • 對寫操作加鎖
  • 并發程度降低了,隔離性提高了
  • 解決了臟讀的問題,任然存在不可重復讀、幻讀的問題

repeatable read

  • mysql 的默認隔離級別
  • 對寫和讀都加鎖了
  • 并發程度又降低了,隔離性又提高了
  • 解決了臟讀、不可重復讀的問題,任然存在幻讀問題

serializable

  • 嚴格串行化
  • 并發程度最低(串行執行),隔離性最高
  • 解決了臟讀、不可重復讀、幻讀的問題

注意:

  • 從上到下
  • 隔離性依次增高
  • 并發性依次降低
  • 執行速度依次降低
  • 數據可靠性依次提高

總結:

  • 在實際的開發中就可以根據當前要解決的問題的需求場景,來決定使用哪個隔離級別
  • 如果涉及到 金錢交易 這樣的場景,就可以讓讓并發性低一點,隔離性高一點,以提高精準度
  • 如果涉及到 統計點贊數、瀏覽量 這樣的場景 ,就可以讓并發性高一點,隔離性低一點,以提高效率

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

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

相關文章

Java數據結構之《鏈式二叉樹的創建及遍歷》(難度系數100)

一、前言: 這是懷化學院的:Java數據結構中的一道難度偏難(偏難理解)的一道編程題(此方法為博主自己研究,問題基本解決,若有bug歡迎下方評論提出意見,我會第一時間改進代碼,謝謝!) 后面其他編程題…

視頻剪輯:視頻轉碼實用技巧,批量將MP4轉為MP3音頻

隨著數字媒體設備的普及,視頻和音頻文件已成為日常生活中的重要組成部分。有時,可能要將MP4視頻文件轉換為MP3音頻文件,以提取其中的音頻內容或者進行其他處理。這是耗費時間的任務,那要如何操作呢?本文詳解云炫AI智剪…

TypeScript中泛型對象、泛型類

一. 概覽 本文詳細介紹泛型中泛型對象和泛型類的使用,結合實際應用場景,加深對泛型的理解、使用。 二. 泛型對象 舉個例子 const test {a: 1,b: 1 }一個類型有沒有一種可能讓我么在定義的時候傳入一個類似于變量的形參,在使用的時候傳入…

Jtti:香港云服務器如何實現遠程連接?

云服務器具有靈活擴展、高可用性、易于管理和數據安全等優點,因此被廣泛應用于各種業務場景。然而,對于初次使用云服務器的用戶來說,如何實現遠程連接可能是一個難題。本文將詳細介紹云服務器實現遠程連接的步驟和注意事項,幫助用…

教你pycharm運行Django第一個項目

文章目錄 前言搭建Django:1.新建Django項目:2.為Django項目指定遠程中創建的虛擬環境下的python解釋器:3.配置ubuntu的端口轉發(添加端口號為1234的端口):關于Python技術儲備一、Python所有方向的學習路線二、Python基…

循環單向鏈表與約瑟夫問題

循環鏈表介紹 先不急著看約瑟夫問題是什么,先了解循環鏈表的結構,那什么是循環鏈表? 循環,顧名思義,從鏈表中第一個節點出發,還會遇到第一個節點,形成循環的一環。也就是說鏈表中最后一個節點…

python 使用 watchdog 實現類似 Linux 中 tail -f 的功能

一、代碼實現 import logging import os import threading import timefrom watchdog.events import FileSystemEventHandler from watchdog.observers import Observerlogger logging.getLogger(__name__)class LogWatcher(FileSystemEventHandler):def __init__(self, log_…

《opencv實用探索·十五》inRange二值化圖像

opencv接口如下: void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);函數實現二值化功能,主要是將在兩個閾值內的像素值設置為白色(255),而不在閾值區間內的像素值設置為黑色&am…

一篇文章帶你快速入門 Nuxt.js 服務端渲染

1. Nuxt.js 概述 1.1 我們一起做過的SPA SPA(single page web application)單頁 Web 應用,Web 不再是一張張頁面,而是一個整體的應用,一個由路由系統、數據系統、頁面(組件)系統等等&#xff0…

什么是HTTPS加密協議?HTTPS安全傳輸原理,SSL和TLS介紹,NGINX如何配置SSL證書

HTTPS介紹 HTTPS是超文本傳輸協議(HTTP)的安全版本。它使用SSL(安全套接層)或TLS(傳輸層安全)加密協議來保護數據傳輸的安全性和機密性,以防止未經授權的訪問和竊聽。HTTPS協議通常用于處理敏感…

HbuilderX使用Uniapp+Vue3安裝uview-plus

如果你是vue2版本想使用uniapp去配置uviewui庫可以參考之前的文章 小程序的第三方ui庫推薦較多的還是uview的,看起來比較美觀,功能也比較完善,下面將提一下Vue3安裝uview-plus庫的教程 創建項目 安裝 首先進入官網 uView-Plus 直接下載并導…

預訓練--微調

預訓練–微調 一個很簡單的道理,如果我們的模型是再ImageNet下訓練的,那么這個模型一定是會比較復雜的,意思就是這個模型可以識別到很多種類別的即泛化能力很強,但是如果要它精確的識別是否某種類別,它的表現可能就不…

07-2 Python模塊和命名空間

1. 模塊 概念:其實就是一個Python文件,正常文件有的變量,函數,類,模塊都有 功能:模塊可以被其它程序引入,以使用該模塊中的函數等功能。 示例:test-module.py調用mymodule.py模塊中的now_time…

充電樁IC

充電樁IC 電子元器件百科 文章目錄 充電樁IC前言一、充電樁IC是什么二、充電樁IC的類別三、充電樁IC的應用實例四、充電樁IC的工作原理總結前言 充電樁IC的設計和功能會根據不同的充電協議和市場需求進行調整和定制。目前市場上有許多不同型號和廠家的充電樁IC可供選擇,以滿足…

一篇文章帶你快速入門 Vue 核心語法

一篇文章帶你快速入門 Vue 核心語法 一、為什么要學習Vue 1.前端必備技能 2.崗位多,絕大互聯網公司都在使用Vue 3.提高開發效率 4.高薪必備技能(Vue2Vue3) 二、什么是Vue 概念:Vue (讀音 /vju?/,類似于 view) …

Mysql 日期函數大全

一、時間函數 (一)、獲取當前時間 1、NOW() 獲取當前日期和時間,在程序一開始執行便拿到時間 返回格式 YYYY-MM-DD hh:mm:ss eg: NOW() 得到 2023-12-03 12:20:02 NOW(),SLEEP(2),NOW() 得到 2023-12-03 12:20:02 | 0 | 2023-…

目標檢測——OverFeat算法解讀

論文:OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks 作者:Pierre Sermanet, David Eigen, Xiang Zhang, Michael Mathieu, Rob Fergus, Yann LeCun 鏈接:https://arxiv.org/abs/1312.6229 文章…

Go語言-讓我印象深刻的13個特性

我們正在加速進入云原生時代,Go語言作為云原生的一塊基石,確有它的獨到之處。本文介紹Go語言的幾個讓我印象深刻的特性。 1、兼顧開發效率和性能 Go語言兼顧開發效率和性能。可以像Python那樣有很快的開發速度,也可以像C那樣有很快的執行速…

SpringAOP專欄二《原理篇》

上一篇SpringAOP專欄一《使用教程篇》-CSDN博客介紹了SpringAop如何使用,這一篇文章就會介紹Spring AOP 的底層實現原理,并通過源代碼解析來詳細闡述其實現過程。 前言 Spring AOP 的實現原理是基于動態代理和字節碼操作的。不了解動態代理和字節碼操作…

【C語言】函數遞歸詳解(一)

目錄 1.什么是遞歸: 1.1遞歸的思想: 1.2遞歸的限制條件: 2.遞歸舉例: 2.1舉例1:求n的階乘: 2.1.1 分析和代碼實現: 2.1.2圖示遞歸過程: 2.2舉例2:順序打印一個整數的…