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

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

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事務的一些基礎知識,如有錯誤還請各位批評指正,喜歡我的文章可以關註或者收藏


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

更多相關文章
  • --創建表空間 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 ...
一周排行
  • 比如要拆分“呵呵呵90909086676喝喝999”,下麵當type=0返回的是中文字元串“呵呵呵,喝喝”,type=1返回的是數字字元串“90909086676,999”, private string GetStrings(string str,int type=0) { IList<strin ...
  • Swagger一個優秀的Api介面文檔生成工具。Swagger可以可以動態生成Api介面文檔,有效的降低前後端人員關於Api介面的溝通成本,促進項目高效開發。 1、使用NuGet安裝最新的包:Swashbuckle.AspNetCore。 2、編輯項目文件(NetCoreTemplate.Web.c ...
  • 2020 年 7 月 30 日, 由.NET基金會和微軟 將舉辦一個線上和為期一天的活動,包括 微軟 .NET 團隊的演講者以及社區的演講者。本次線上大會 專註.NET框架構建微服務,演講者分享構建和部署雲原生應用程式的最佳實踐、模式、提示和技巧。有關更多信息和隨時瞭解情況:https://focu... ...
  • #abp框架Excel導出——基於vue #1.技術棧 ##1.1 前端採用vue,官方提供 UI套件用的是iview ##1.2 後臺是abp——aspnetboilerplate 即abp v1,https://github.com/aspnetboilerplate/aspnetboilerp ...
  • 前言 本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 作者:碧茂大數據 PS:如有需要Python學習資料的小伙伴可以加下方的群去找免費管理員領取 input()輸入 Python提供了 input() 內置函數從標準輸入讀入一 ...
  • 從12年到20年,python以肉眼可見的趨勢超過了java,成為了當今It界人人皆知的編程語言。 python為什麼這麼火? 網路編程語言搜索指數 適合初學者 Python具有語法簡單、語句清晰的特點,這就讓初學者在學習階段可以把精力集中在編程對象和思維方法上。 大佬都在用 Google,YouT ...
  • 在社會上存在一種普遍的對培訓機構的學生一種歧視的現象,具體表現在,比如:當你去公司面試的時候,一旦你說了你是培訓機構出來的,那麼基本上你就涼了,那麼你瞞著不說,然後又通過了面試成功入職,但是以後一旦在公司被髮現有培訓經歷,可能會面臨被降薪,甚至被辭退,培訓機構出來的學生,在用人單位眼裡就是能力低下的 ...
  • from typing import List# 這道題看了大佬寫的代碼,經過自己的理解寫出來了。# 從最外圍的四周找有沒有為O的,如果有的話就進入深搜函數,然後深搜遍歷# 判斷上下左右的位置是否為Oclass Solution: def solve(self, board: List[List[s ...
  • import requests; import re; import os; # 1.請求網頁 header = { "user-agent":'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, li ...
  • import requests; import re; import os; import parsel; 1.請求網頁 header = { "user-agent":'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537. ...