[MySQL] mysql的事務隔離和幻讀和死鎖問題

来源:https://www.cnblogs.com/taoshihan/archive/2019/04/08/10669676.html
-Advertisement-
Play Games

1.系統要通過嚴格的ACID測試,ACID表示原子性/一致性/隔離性/持久性原子性:一個事務必須被視為一個不可分割的最小工作單元一致性:資料庫總是從一個一致性的狀態轉換到另外一個一致性的狀態隔離性:通常來說一個事務所做的修改在最終提交以前對其他事務是不可見的持久性:一旦事務提交,則其所做的修改就會永 ...


1.系統要通過嚴格的ACID測試,ACID表示原子性/一致性/隔離性/持久性
原子性:一個事務必須被視為一個不可分割的最小工作單元
一致性:資料庫總是從一個一致性的狀態轉換到另外一個一致性的狀態
隔離性:通常來說一個事務所做的修改在最終提交以前對其他事務是不可見的
持久性:一旦事務提交,則其所做的修改就會永久保存到資料庫中


2.sql標準中定義了四種隔離,較低級別的隔離可以執行更高的併發,開銷也更低

READ UNCOMMITTED 未提交讀,事務中的修改還沒提交,其他事務就可以看到,這也是臟讀,一般不會用
READ COMMITED 提交讀,大多數的預設級別,在提交之前,所做的任何修改對其他事務都是不可見的
REPEATABLE READ 可重覆讀,解決了臟讀的問題,保證了同一個事務中多次讀取同一個記錄結果一致,但是還是會有幻讀問題
SERIALIZABLE 可串列化,避免幻讀問題,每一行都加鎖

3.事務的隔離級別下的問題
臟讀:事務可以讀取別的事務未提交的臟數據
不可重覆讀:事務不可以讀取未提交的數據,但是如果在另一個事務修改並提交了數據,此時可以讀取到,同一事務兩次相同的select結果可能會不同
幻讀:事務不可以讀取未提交的,也不能讀取修改提交的,但是當另一個事務插入新數據提交後,我本次事務有時會插入衝突,或者更新時更新的數據多了
加鎖:強制串列執行,鎖開銷比較大

4.查看隔離級別:
select @@global.tx_isolation, @@tx_isolation;
| @@global.tx_isolation | @@tx_isolation |
+-----------------------+-----------------+
| REPEATABLE-READ | REPEATABLE-READ

5.幻讀問題

開啟事務,查詢數據

此時有另外的會話插入新數據

再次查詢新數據不會出現,但是插入時會報錯

 

 

6.mysql 死鎖:
1.兩個或多個事務在同一個資源上相互占用,並請求鎖定對方占用的資源,導致惡性迴圈
2.解決這種問題,檢測到死鎖的迴圈依賴,立即返回一個錯誤
3.時間達到了鎖等待超時限定,放棄鎖請求
4.將持有最少行級寫鎖的事務回滾
5.如果是真正的數據衝突,這種是很難避免的,必須要提交或回滾其中一個事務

開啟事務,更新數據,還沒提交

此時另外的會話執行同樣的更新,會阻塞,一段時間和會報錯

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

 


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

-Advertisement-
Play Games
更多相關文章
  • 問題描述:在升級Exchange 2013 CU22檢查群集節點狀態的過程中發現群集組處於失敗狀態,具體報錯信息如下:警告:資料庫可用性組”***”見證處於失敗狀態。資料庫可用性組要求見證伺服器保持仲裁。請使用 set-DatabaseAvailabilityGroup cmdlet重新創建此見證服... ...
  • 在之前寫過一篇博客"關係資料庫如何快速查詢表的記錄數",裡面介紹了使用sp_spaceused查看表的記錄數是否正確的問題,具體如下: 關於問題3:有多個索引的表,是否記錄數會存在不一致的情況? 答案:個人測試以及統計來看,暫時發現多個索引的情況下,sys.partitions中的rows記錄數都是... ...
  • windows系統無法改成 lower_case_table_names=0, 因為windows預設是1,就算改也只能改成2,以下截自 MySQL 8.0 Reference Manual 然後,當我們按照網上方法把 my.ini中的lower_case_table_names強行改成2之後,會發 ...
  • 相信大家在很多實際業務中(特別是後臺系統)會使用到各種篩選條件來篩選結果集 首先添加測試數據 1.有使用EXEC來避免全表掃描 或者條件少的情況下 2.使用IS NULL來實現 第一種方案,不會破壞索引,但冗餘的代碼看起來讓人難受 第二種方案,會導致全表掃描(破壞索引) 以上是網上查閱的資料,方案二 ...
  • 每一個資料庫都有自己的數據類型。同樣子redis為我們提供了五種類型的數據——字元串、哈希、列表、集合、有序集合。我們知道關係型數據的數據存放型式是一張二維表。用行和列來表示數據之間的關係。redis是一個nosql資料庫當然不可能在用什麼二維表的形式來表示了。他所有的數據都是以key=value的 ...
  • AI中台是一套完整的智能模型全生命周期管理平臺和服務配置體系,基於數據平臺服務,通過對智能服務的共用復用、對智能服務研發相關角色進行管理,以及研發流程的標準化、自動化,對前臺業務提供個性化智能服務的迅速構建能力支持。 ...
  • 隱式和顯式鎖定:1.innodb是兩階段鎖定協議,隱式鎖定比如在事務的執行過程中.會進行鎖定,鎖只有在commit或rollback的時候,才會同時被釋放2.特定的語句進行顯式鎖定 select ... lock in share mode ; select ... for update,where ...
  • mysql排序問題(對字元串類型數據進行排序)對普通數字字元串欄位排序:select * from qq ORDER BY score*1 DESC,time*1 ASC 一、在mysql操作中我們經常需要對數據進行類型轉換。此時我們應該使用的是cast()或convert()。二、兩者的對比相同點 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...