Oracle鎖-行級排它鎖(一)

来源:https://www.cnblogs.com/bibi-feiniaoyuan/archive/2020/06/18/oracle_lock1.html
-Advertisement-
Play Games

學習電子書:https://docs.oracle.com/cd/E18283_01/server.112/e16508/consist.htm#CNCPT1339 什麼是排它鎖? 每一個事務在修改資源時會獲得排他鎖,該事務不結束,則其他事務不能修改此資源。(註意:這裡的修改不是數據“增刪查改”中的 ...


學習電子書:https://docs.oracle.com/cd/E18283_01/server.112/e16508/consist.htm#CNCPT1339

什麼是排它鎖?

每一個事務在修改資源時會獲得排他鎖,該事務不結束,則其他事務不能修改此資源。(註意:這裡的修改不是數據“增刪查改”中的改。數據是資源的一種,可以先理解為修改數據。第一個事務修改資源,第一個事務就先占有排他鎖)。

什麼是行級排他鎖?

針對行數據修改,事務占有的排他鎖,稱作行級排它鎖(或排他的行鎖,或粒度為行的排它鎖)。行數據修改的修改不是指數據內容的修改,它是指新增行,刪除行,修改行內容

實戰:

這裡有一個bank表,主鍵是id。下麵的部分例子以當前存在的id=2的行進行說明。

 

 

第一種行修改:某一個事務刪除行,其他事務不能新增該行,修改該行內容,刪除該行。

打開一個視窗,針對id=2的行,執行刪除操作,不commit也不rollback。(一個視窗就是一個事務)

打開另一個視窗,單獨執行下麵每一條語句,你會發現它都在Executing。

update bank set money = 8000 where id=2; 
insert into bank values (2,8000); --主鍵一樣
delete from bank b where b.id=2;

 

 

 

 

 第二種行修改:某事務新增一行數據,另外的事務新增主鍵相同的行,則會等待排它鎖的釋放。

一個視窗執行 insert into bank values (900,8000)。另一個視窗單獨執行下麵的每一句sql。(每重新自測一句SQL,都要把當前事務結束掉再重新開始。)

--以下的新增操作需要等待
delete from bank b where b.id=900; -- 0條刪除,原本表裡就沒有這條記錄
update bank set money = 8000 where id=900; --0條修改,原本表裡就沒有這條記錄
--Executing,因為可以Commit意味著就要成功插入,
--但另外的事務也加了相同主鍵的行,所以會等跟自己衝突的那行的排它鎖釋放。
insert into bank values (900,8000);

第三種行修改:某事務修改一行數據,另外的事務修改、刪除相同的行,則會等待排他鎖的釋放。

--另一個事務修改id為2的數據 update bank b set money=900 where b.id=2
update bank set money = 8000 where id=2; --等待
delete from bank b where b.id=2; --等待
insert into bank values (2,8000); --不等待,因為另外的事務update不了主鍵,而新增就判斷約束是否重覆。

 


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

-Advertisement-
Play Games
更多相關文章
  • 你是不是有遇到過這樣的場景?使用 SSH 命令進入到伺服器,然後再用 cd 命令進入到對應目錄,再繼續進行你的工作。 這種操作對於新手來講特別常見,良許之前也是這樣。在本文,老司機將帶你來進行更高效的操作,只需一步即可達到你想要的效果。 而且,不僅僅是實現快速進入到 Linux 伺服器特定的目錄,還 ...
  • 進入黑客世界,跟我學習日常寫的shell腳本-設置系統selinux ...
  • 首先來看一下並口和串口的區別:引腳的區別: 串口SRAM(或其它存儲器)通常有如下的示意圖: 串口SRAM引腳 引腳只有SCK,CS#,SI,SO,HOLDB,VCC,VSS不到8個,一般遵循SPI協議,並口SRAM引腳很多,串口SRAM引腳很少。大部分SRAM是並口(parallel)操作的,也有 ...
  • https://blog.csdn.net/m0_37321987/article/details/903447621、右擊任務欄,啟動任務管理器; 2、選擇“性能“選項卡,點擊“資源監視器”; 3、點擊“CPU”選項卡,在“關聯的句柄”右側的“搜索句柄”輸入框輸入文件名或文件夾名並點擊搜索;win ...
  • 問題:常用命令“ll”失效或命令未找到 原因: "ll"命令不是linux的基本命令, 它是"ls -l"的別名, 部分版本並不直接支持“ll”命令輸出。 ###解決方法: 運行“vi ~/.bashrc” 查看該文件里是否有“alias ll='ls -l'”這樣的數據, 如有,將數據前的“#”去 ...
  • basename命令用於獲取路徑中的文件名或路徑名,還可以對末尾字元進行刪除。 ...
  • 晶元生態很重要,接觸到的一些進口晶元,比如ST、TI、NORDIC、AVR等,有論壇,網上能找到資料,晶元容易買到,SDK不停更新。這也就是ST的晶元、Arduino IDE市場很大、用戶基數多的原因,穩定性、功能、開發速度缺一不可。 從使用上來說,開發產品最喜歡用的還是STM8S003,但是因為價... ...
  • 哨兵作用 哨兵(sentinel) 是一個分散式系統,是程式高可用性的一個保障。用於監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,當出現故障時通過投票機制選擇新的master並將所有slave連接到新的master。 監控 不斷地檢查master和slave是否正常運行 master存活 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...