Java事務解析(事務的基本操作+隔離的等級+事務的四大特性+事務的概念)

来源:https://www.cnblogs.com/pjhaymy/archive/2020/07/25/13375831.html
-Advertisement-
Play Games

Java事務解析(事務的基本操作+隔離的等級+事務的四大特性+事務的概念) 什麼是事務? 如果一個包含多個步驟的業務操作,這些操作被事務管理,那麼這些操作要麼同時成功要麼同時失敗 事務的四大特性(必須記住): 持久性:當事務回滾或者提交之後,資料庫會持久化數據 一致性:事務操作前後,數據的總量不變 ...


Java事務解析(事務的基本操作+隔離的等級+事務的四大特性+事務的概念)

什麼是事務?

如果一個包含多個步驟的業務操作,這些操作被事務管理,那麼這些操作要麼同時成功要麼同時失敗

事務的四大特性(必須記住):
持久性:當事務回滾或者提交之後,資料庫會持久化數據
一致性:事務操作前後,數據的總量不變
原子性:是不可分割的最小單位,不可分割,要麼同時成功要麼同時失敗,不可分割
隔離性:各個事務之間相互獨立

事務的基本操作:

開啟事務:start transaction
回滾事務:Roolback
提交:commit;
事務提交的兩種方式:
自動提交:
mysql中事務是預設自動提交的
比如我們執行一條DML(Data Manipulation Language),他會自動提交數據,將數據持久化到資料庫中
手動提交:
Oracle資料庫預設是手動提交的,
需要開啟事務再手動提交

查看事務提交的方式:
在這裡插入圖片描述可以看到mysql的預設提交方式是自動提交,-- 1 代表自動提交 0 代表手動提交

修改事務的提交方式:

set @@autocommit

在這裡插入圖片描述可以看到事務的提交方式被修改為手動提交

事務的隔離等級:

1
Read uncommitted:讀未提交
產生的問題:臟讀,不可重覆讀,幻讀
2
Read commited:讀已提交
產生問題:不可重覆讀,幻讀
3
Repeatable read 可重覆讀(Mysql預設讀法):
產生的問題:幻讀
4
serialzable:串列化
可以解決所有問題

事務的隔離等級越高,安全等級也越高,但是效率越來越低
資料庫查詢隔離級別:
select @@tx_isolation
設置資料庫的隔離等級:
select global transaction isolation level

什麼是幻讀,臟讀,不可重覆讀

不可重覆讀:
不可重覆讀是指A事務讀取了B事務已經提交的更改數據。假如A在取款事務的過程中,B往該賬戶轉賬100,A兩次讀取的餘額發生不一致。

臟讀:
A事務讀取B事務尚未提交的更改數據,併在這個數據的基礎上進行操作,這時候如果事務B回滾,那麼A事務讀到的數據是不被承認的。例如常見的取款事務和轉賬事務:
比如你去隔壁老王那借錢,你在他家的的時候看到他給你轉的錢到賬了,然後你就給他打了欠條,但是在你出了門,去銀行取錢的時候,發現從老王 那借的錢人間蒸發了,因為老王使用了事務回滾,迷惑了你一番
在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述

幻讀:
A事務讀取B事務提交的新增數據,會引發幻讀問題。幻讀一般發生在計算統計數據的事務中,例如銀行系統在同一個事務中兩次統計存款賬戶的總金額,在兩次統計中,剛好新增了一個存款賬戶,存入了100,這時候兩次統計的總金額不一致。

在這裡插入圖片描述
以上就是java事務的一些基礎知識,如有錯誤還請各位批評指正,喜歡我的文章可以關註或者收藏


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

-Advertisement-
Play Games
更多相關文章
  • --創建表空間 CREATE TABLESPACE aifu --表空間名 aifu LOGGING DATAFILE 'D:\dev_config\OracleTableSpaces\aifu.DBF' SIZE 5M --數據文件路徑 D:\dev_config\OracleTableSpace ...
  • 導出數據 導入/導出可以操作的是本地的mongodb伺服器,也可以是遠程的,所以,都有如下通用選項。 利用mongoexport -h host 主機 -port 埠 -d 知名使用的庫 -c 指明要導出的集合 -o 指明要導出的文件名 --csv 指定導出的csv格式 -q 過濾導出 -f fi ...
  • 索引是對資料庫表中一列或多列的值進行排序的一種結構,可以讓我們查詢資料庫變得 更快。MongoDB 的索引幾乎與傳統的關係型資料庫一模一樣,這其中也包括一些基本的查詢優化技巧。 增加檢索的效率. mongodb提供了索引的支持.(越來越傾向於關係型資料庫) 通常建立索引的, 基本要求, 就是文檔的結 ...
  • 許可權概述 在mongodb裡面的用戶是屬於資料庫的,每個資料庫有自己的管理員,管理員登錄後,只能操作所屬的資料庫。 註意:一般在admin資料庫中創建的用戶授予超級管理員許可權,登錄後可以操作任何的資料庫。 創建超級管理員 註意:在開啟許可權管理控制時,一定先要創建一個超級管理員授予超級管理許可權。 (1 ...
  • 添加文檔 語法: db.集合名.insert({k1:"v1", k2:"v2"....}) 註意: (1)文檔就是鍵值對,數據類型是BSON格式,支持的值更加豐富。 比如:db.集合名.insert({name:"bashlog", spc:{weight:100, address:"henan" ...
  • 創建資料庫 語法: use database_name; 註意:如果該資料庫不存在,則創建,如果該資料庫存在,則是切換,如果創建了資料庫,沒有任何操作,則會自動刪除該資料庫。 可以使用db命令查看當前所處的資料庫 查看資料庫 語法: show dbs; 創建集合 語法: db.集合名.insert( ...
  • 報錯信息 無法訪問資料庫 ReportServer。 (ObjectExplorer) 具體錯誤信息: 程式位置: 在 Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.DatabaseNavigableItem.get_C ...
  • 時光在不經意間,總是過得出奇的快。小暑已過,進入中暑,太陽更加熱烈的綻放著ta的光芒,...在外面被太陽照顧的人們啊,你們都是勤勞與可愛的人啊。在房子里已各種姿勢看我這篇這章的你,既然點了進來,那就由我繼續帶你回顧MySql的知識吧! 回顧練習資料girls庫以及兩張表的腳本: https://pa ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...