【MySQL--->事務】

文章目錄

    • @[TOC](文章目錄)
  • 一、基本概念
  • 二、事務的操作
    • 1.設置全局事務隔離級別
    • 2.設置事務提交方式
    • 3.事務操作
  • 三、事務隔離性
    • 1.隔離性概念
    • 2 .隔離級別設置
  • 四、MVCC多版本控制
    • 2. read view

一、基本概念

事務是由若干條具有邏輯相關性的SQL語句組成的,用來完成某種任務的**邏輯單元.**事務具有原子性,一致性,隔離性,持久性4大屬性.
原子性:保證事務要么不執行,要么執行完,如果發生錯誤就回滾到事務發生前的狀態,就跟事務沒有發生一樣.
一致性:保證事務執行前和執行后,數據庫的完整性不會被破壞.其他事務看到的數據庫是一致的,不會看到事務執行過程中的不確定的數據,一致性是由原子性保證的,與用戶邏輯強相關,由用戶決定,如果因為用戶邏輯導致事務中有的SQL語句沒有成功執行,就會造成數據庫的不一致.
隔離性:事務操作的數據對于其他事務是隔離的.不會影響其他事務,也不會被其他事務影響.
持久性:事務的結果在數據庫中永久有效,不會因為數據庫故障被破壞.
事務存在的意義是為了方便上層應用程序的使用,有了事務,應用程序層面就不需要關系,數據庫操作失敗應該怎么做,并發訪問數據庫應該怎么做,只需要關心怎么操作數據庫,操作過程中的各種問題不需要關心.簡化了應用程序的編程模型.
不同的存儲引擎支持事務的情況不同.MySQL只有innodb支持事務.myisam不支持事務.show engines\G可以查看存儲引擎屬性信息.
事務的提交方式有自動提交和手動提交兩種,show variables like ‘autocommit’;語句可以查看事務提交方式ON為自動提交,OFF為手動提交set autocommit=1設置自動提交,set autocommit=0設置手動提交

二、事務的操作

1.設置全局事務隔離級別

set global transation isolation level read uncommitted 設置事務隔離級別,設置完畢需要重啟終端.
select @@tx_isolation;查看事務隔離級別

2.設置事務提交方式

autocommit=0為非自動提交,1為自動提交方式
在這里插入圖片描述

3.事務操作

手動啟動事務begin或者start transaction
在這里插入圖片描述
事務回滾savepoint 變量名,設置保存點,rollback,回滾.回滾操作可以全部回滾,也可以回滾到保存點,回滾到保存點,保存點之后的數據全部清除,保留之前的數據.
在這里插入圖片描述
提交事務commit,提交之后事務就無法再回滾了,如果SQL發生異常程序退出時,SQL會自動回滾到事務開始的時候,與是否自動提交無關.
單個SQL語句也構成事務,當設置自動提交時,每條SQL語句執行完會自動提交,反之需要commit手動提交.

三、事務隔離性

1.隔離性概念

因為事務并發執行需要保持事務的原子性,保證多事務并發時不互相干擾,所以有了隔離性,因為允許事務執行時更具情況,可以收到不同程度的干擾,所有有了隔離級別.
事務隔離級別有4中,讀未提交,讀提交,可重復讀,串行化.
臟讀:一個用戶事務中讀到的數據是其他用戶事務未提交的事務,這叫做臟讀.
不可重復讀, 兩個事務并發執行,一個事務執行期間操作的數據因為另一個事務的提交發生了改變,導致結果出現差錯叫做不可重復讀.
**幻讀:**在可重復讀的隔離級別下,仍然可以讀到新插入并且已提交的數據.
串行化:是事務級別的串行,對每個讀的數據行加共享鎖,插入,刪除,修改都是串行的.

2 .隔離級別設置

設置全局隔離級別,會影響所有終端的隔離級別.
設置會話隔離級別,默認與全局隔離級別一致
在這里插入圖片描述
在這里插入圖片描述
查看隔離級別
在這里插入圖片描述

四、MVCC多版本控制

概念: MVCC是用來解決讀寫沖突的無鎖并發控制.

事務結構: 每個事務都由數據,事務id,隱式主鍵id,flag標志,回滾指針組成.MySQL內部還維護了一個緩沖區undo log.

flag: 使用delete刪除數據不是真的刪除數據,而是將數據flag設置為刪除,這是出于數據恢復,刪除需要移動數據等多方面考慮.

回滾操作: undo log 中存儲了與實際寫入操作相反的操作,回滾時,執行想反操作即可,例如實際執行insert語句,會在undo log中記錄delete語句.

版本鏈: 每執行一條更新操作,會在undo log中記錄數據項的歷史版本,然后將歷史版本數據項在undo log中的地址記錄在已經更新的數據項的回滾指針表項中.多個歷史版本就形成版本鏈,一個版本也叫一個快照,讀歷史版本也叫快照讀.事務提交了,與事務相關,但是與其他

**讀寫操作并發執行: ** 使用讀未提交隔離級別,雙方都是當前讀(讀到的是最新的數據).如果是讀提交,一個事務是當前讀,一個是快照讀.因為讀的不是一個數據所以不用加鎖,從根本上解決了幻讀和臟讀和不可重復讀的問題.

2. read view

**概念: ** read view是事務進程快照讀時創建的一個用于快照可見性判斷的類,重要組成成員屬性有m_low_limit_id,m_up_limit_id,m_create_trx_id,m_ids;

**m_low_limit_id: ** 高水位,表示與當前事務同時運行事務的id中最大一個事務id加1;
**m_up_limit_id: ** 低水位,表示與當前事務同時運行事務的id中最小的一個事務id;
**m_create_trx_id: ** 當前事務的id;
**m_ids: ** 與當前事務同時在運行的所有事務id;

**檢查規則: ** 快照讀時會用readview類中的數據對比版本鏈中數據,如果快照id小于低水位,說明是當前事務運行前就已經提交的數據,或者是id等于m_create_trx_id說明是當前事務的快照,應該看見.如果快照id大于等于高水位,說明該事務是在當前事務運行之后才出現的,不應該被看見.如果m_ids是空說明就當前一個事務在運行,那么所有快照都能被看見.如果快照id在m_ids中說明事務仍在活躍,不應該被看見,如果不在m_ids中說明事務已提交,可以被看見.

可重復讀原理: 當事務進行快照讀的時候,會創建一個readview對象,一直到當前事務結束都是用一個readview,此時與當前事務同時運行的事務的操作對于當前事務而言是不可見的,就算其他事務在當前事務執行期間結束,readview中仍然會哪些事務當做正在運行的事務,也是不可見的.

**讀提交: ** 當前事務每次快照讀都會創建新的readview,與當前事務同時運行的其他事務在沒有提交前事務id是記錄在m_ids中的,提交后當前事務再次快照讀將重新創建readview,已經結束的事務id就不會出現在readview中,那么該事務的快照是可見的,就形成了讀提交.


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

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

相關文章

C語言--判斷年月日是否合理

一.題目描述 比如輸入2001,2,29,輸出: 不合理 。因為平年的二月只有28天 比如輸入2000,6,31,輸出:不合理。因為6月是小月,只有30天。 二.思路分析 本題主要注意兩個問…

輕量服務器是不是vps,和vps有什么區別

1.輕量型服務器的定義和特點 輕量型服務器是介于云服務器和共享型服務器之間的一種解決方案。它提供較為獨立的資源分配,但規模較小,適用于中小型網站和應用程序。輕量型服務器的硬件資源來源于大型的公有云集群的虛擬化技術。輕量型服務器的性能和帶寬…

強化學習--多維動作狀態空間的設計

目錄 一、離散動作二、連續動作1、例子12、知乎給出的示例2、github里面的代碼 免責聲明:以下代碼部分來自網絡,部分來自ChatGPT,部分來自個人的理解。如有其他觀點,歡迎討論! 一、離散動作 注意:本文均以…

ERP、CRM、SRM、PLM、HRM、OA……都是啥意思

在天某微電子上班,經常會聽說一些系統或平臺名稱,例如ERP、CRM、SRM、PLM、HRM、OA、FOL等。 這些系統,都是干啥用的呢? █ ERP(企業資源計劃) 英文全稱:Enterprise Resource Planning 定義…

如何使用SD-WAN提升物流供應鏈網絡效率

案例背景 本次分享的物流供應鏈企業是一家國際性的大型企業,專注于提供全球范圍內的物流和供應鏈解決方案。案例用戶在不同國家和地區均設有多個分支機構和辦公地點,以支持客戶需求和業務運營。 在過去,該企業用戶使用傳統的MPLS網絡來連接各…

OceanBase:04-單機在線轉分布式部署

目錄 1.當前部署情況 2.單Zone多OBServer模式 3.多Zone多OBServer模式 3.1 集群規劃 3.2 安裝OBServer程序 3.3 新增Zone 3.4 啟動Zone 3.5 向Zone新增OBserver節點 3.6重復3.2~3.5新增其他Zone 4.擴充資源 OceanBase 數據庫為單機分布式一體化架構,支持單…

ssh遠程使用jupyter notebook

Jupyter配置 密碼生成哈希值 jupyter lab password拷貝出哈希值 vi /root/.jupyter/jupyter_server_config.json生成配置文件 jupyter-lab --generate-config編輯配置文件 vi /root/.jupyter/jupyter_lab_config.py查找 /password 按n查找一下一個 c.ServerApp.password …

純干貨丨電腦監控軟件有哪些(三款電腦監控軟件大盤點)

電腦監控軟件在日常生活和工作中的應用越來越廣泛。這些軟件可以幫助我們監控電腦的使用情況,保護電腦的安全,提高工作效率。本文將介紹一些高人氣的電腦監控軟件,并分享一些純干貨。 1、 域之盾軟件----電腦監控系統 是一款功能強大的電腦監…

LeetCode:307. 區域和檢索 - 數組可修改(樹狀數組 C++)

目錄 307. 區域和檢索 - 數組可修改 題目描述: 實現代碼與解析: 樹狀數組: 原理思路: 307. 區域和檢索 - 數組可修改 題目描述: 給你一個數組 nums ,請你完成兩類查詢。 其中一類查詢要求 更新 數組…

Linux輸入設備應用編程(觸摸屏獲取坐標信息)

上一章學習了開發板外接鍵盤并獲取鍵盤的的輸入 Linux輸入設備應用編程(鍵盤,按鍵)-CSDN博客 本章編寫觸摸屏應用程序,獲取觸摸屏的坐標信息并將其打印出來 目錄 一 觸摸屏數據分析(觸摸,點擊&#xff…

采用connector-c++ 8.0操作數據庫

1.下載最新的Connector https://dev.mysql.com/downloads/connector/cpp/,下載帶debug的庫。 解壓縮到本地,本次使用的是帶debug模式的connector庫: 注:其中mysqlcppconn與mysqlcppconn8的區別是: 2.在cmakelist…

請簡要說明 Mysql 中 MyISAM 和 InnoDB 引擎的區別

“請簡要說明 Mysql 中 MyISAM 和 InnoDB 引擎的區別”。 屏幕前有多少同學在面試過程與遇到過類似問題, 可以在評論區留言:遇到過。 考察目的 對于 xxxx 技術的區別,在面試中是很常見的一個問題 一般情況下,面試官會通過這類…

SpringBoot監聽器解析

監聽器模式介紹 監聽器模式的要素 事件監聽器廣播器觸發機制 SpringBoot監聽器實現 系統事件 事件發送順序 監聽器注冊 監聽器注冊和初始化器注冊流程類似 監聽器觸發機制 獲取監聽器列表核心流程: 通用觸發條件: 自定義監聽器實現 實現方式1 實現監聽器接口: Order(1) …

[操作系統]進程和線程

目錄 1.什么是進程 1.1進程控制塊抽象 1.2 CPU 分配 —— 進程調度(Process Scheduling) 1.3內存分配 —— 內存管理(Memory Manage) 1.4進程間通信(Inter Process Communication) 2.線程 2.1概念 2.2為什么要有線程 2.3線…

論文閱讀 Forecasting at Scale (二)

最近在看時間序列的文章,回顧下經典 論文地址 項目地址 Forecasting at Scale 3.2、季節性 3.3、假日和活動事件3.4、模型擬合3.5、分析師參與的循環建模4、自動化預測評估4.1、使用基線預測4.2、建模預測準確性4.3、模擬歷史預測4.4、識別大的預測誤差 5、結論6、致…

【Python】重磅!這本30w人都在看的Python數據分析暢銷書更新了!

Python 語言極具吸引力。自從 1991 年誕生以來,Python 如今已經成為最受歡迎的解釋型編程語言。 【文末送書】今天推薦一本Python領域優質數據分析書籍,這本30w人都在看的書,值得入手。 目錄 作譯者簡介主要變動導讀視頻購書鏈接文末送書 pan…

【計算機方向】通信、算法、自動化、機器人、電子電氣、計算機工程、控制工程、計算機視覺~~~~~合集!!!

◆本文為大家梳理了近期可投的EI國際會議,涵蓋計算機各個學科方向,均可EI檢索 本期EI會議匯總合集涵蓋領域:計算機視覺、物聯網、算法、通信、智能技術、人工智能、人機交互、機器人、電子電氣等眾多領域! 本期所推薦的EI會議有…

ros2不同機器通訊時IP設置

看到這就是不同機器的IP地址,為了避免在路由器為不同的機器使用DHCP分配到上面的地址,可以設置DHCP分配的范圍:(我的路由器是如下設置的,一般路由器型號都不一樣,自己找一下) 防火墻設置-----&…

Leetcode—13.羅馬數字轉整數【簡單】

2023每日刷題(三十七) Leetcode—13.羅馬數字轉整數 算法思想 當前位置的元素比下個位置的元素小,就減去當前值,否則加上當前值 實現代碼 int getValue(char c) {switch(c) {case I:return 1;case V:return 5;case X:return 1…

elasticsearch 8安裝

問題提前報 max virtual memory areas error max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 如果您的環境是Linux,注意要做以下操作,否則es可能會啟動失敗 1 用編輯工具打開文件/etc/sysctl.conf 2 …