亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關于for update和lock in share mode的區(qū)別及說明

 更新時間:2023年08月29日 14:57:47   作者:小淼同學  
這篇文章主要介紹了關于for update和lock in share mode的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

lock in share mode 就是共享鎖

如果事務對某行數據加上共享鎖之后,可進行讀寫操作;其他事務可以對該數據加共享鎖,但不能加排他鎖,且只能讀數據,不能修改數據。

某個事物想進行修改數據操作,那他必須等其他事物的共享鎖都釋放完畢才能進行修改操作

for update 排他鎖,就是行鎖

如果事務對數據加上排他鎖之后,則其他事務不能對該數據加任何的鎖。

獲取排他鎖的事務既能讀取數據,也能修改數據。

注:普通 select 語句默認不加鎖,而CUD操作默認加排他鎖。

例子

下面例子的前提都是針對同一行數據。

1.同一行數據為前提,兩個事物都進行共享鎖查詢

2.同一行數據為前提,一個事物進行共享鎖查詢,另一個事物進行修改

第一個占有著共享鎖,第二個事物沒法更新,必須等第一個事物釋放才能進行更新

3.同一行數據為前提,一個進行共享鎖查詢,另一個先進行共享鎖查詢,然后update

同第二種,修改的事物就一直在轉圈圈,等待事物1提交。事物1不提交,那事物2只能等到超時返回錯誤。

4.同一行數據為前提,當事物一獲得共享鎖,另一個事物是否可以獲得排它鎖

答案是不能,事物二就一直轉圈圈,等待1的釋放

結論:同一行數據為前提,當一個事物獲得共享鎖,另一個事物可以獲得共享鎖進行讀操作,但不能進行修改操作,想要修改必須等其他的共享鎖釋放完畢。還有一個事物獲得了共享鎖,另一個事物不能獲得排它鎖

5.同一行數據為前提,一個事物獲取到排他鎖,另一個事物進行查詢

結果是可以的,一個獲取排它鎖,另一個進行普通查詢

6.同一行數據為前提,一個事物獲取到排他鎖,另一個事物進行共享鎖的獲取

結果如圖2,愛的魔力轉圈圈,就一直卡在那里

7.同一行數據為前提,一個事物獲取排它鎖,另一個事物是否可以進行修改

結果如圖2,愛的魔力轉圈圈,就一直卡在那里

8.同一行數據為前提,一個事物獲取排它鎖,另一個是否可以獲取排它鎖

結果如圖2,愛的魔力轉圈圈,就一直卡在那里

結論:當前事務獲取某行數據排他鎖后,其他事務是否可以對該行數據進行讀寫操作和獲取共享鎖:其他事務可以讀,不可以獲取共享鎖,不可以寫

這里再給讀者科普一點,行鎖和索引的關系:查詢字段未加索引(主鍵索引、普通索引等)時,使用表鎖

注:InnoDB行級鎖基于索引實現。

未加索引時,兩種行鎖情況為(使用表鎖):

  • 事務1獲取某行數據共享鎖,其他事務可以獲取不同行數據的共享鎖,不可以獲取不同行數據的排他鎖
  • 事務1獲取某行數據排他鎖,其他事務不可以獲取不同行數據的共享鎖、排他鎖

加索引后,兩種行鎖為(使用行鎖):

  • 事務1獲取某行數據共享鎖,其他事務可以獲取不同行數據的排他鎖
  • 事務1獲取某行數據排他鎖,其他事務可以獲取不同行數據的共享鎖、排他鎖

表結果:

CREATE TABLE `pf_banner` (
  `id` bigint(22) NOT NULL AUTO_INCREMENT,
  `num` int(11) DEFAULT NULL,
  `title` varchar(80) DEFAULT NULL,
  `url` varchar(255) DEFAULT NULL,
  `img` varchar(255) DEFAULT NULL,
  `status` tinyint(4) DEFAULT '1' COMMENT '狀態(tài) 1:顯示 -1不顯示',
  `create_time` datetime DEFAULT NULL,
  `modify_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='banner位圖片'

例子

1.未加索引,事務1獲取某行數據共享鎖,事務2更新不同行數據阻塞:

2.未加索引,事務1獲取某行數據共享鎖,事務2獲取不同行數據共享鎖成功:

3.未加索引,事務1獲取某行數據排他鎖,事務2獲取不同行數據共享鎖阻塞:

4.未加索引,事務1獲取某行數據排他鎖,事務2獲取不同行數據排他鎖阻塞:

加索引后表結構:

CREATE TABLE `pf_banner` (
  `id` bigint(22) NOT NULL AUTO_INCREMENT,
  `num` int(11) DEFAULT NULL,
  `title` varchar(80) DEFAULT NULL,
  `url` varchar(255) DEFAULT NULL,
  `img` varchar(255) DEFAULT NULL,
  `status` tinyint(4) DEFAULT '1' COMMENT '狀態(tài) 1:顯示 -1不顯示',
  `create_time` datetime DEFAULT NULL,
  `modify_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_num` (`num`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='banner位圖片'

1.加索引后,事務1獲取某行數據共享鎖,事務2可以更新不同行數據:

2.加索引后,事務1獲取某行數據共享鎖,事務2獲取不同行數據共享鎖成功:

3.加索引后,事務1獲取某行數據排他鎖,事務2獲取不同行數據排他鎖成功:

4.加索引后,事務1獲取某行數據排他鎖,事務2獲取不同行數據共享鎖成功:

科普小知識2:索引數據重復率太高會導致全表掃描:當表中索引字段數據重復率太高,則MySQL可能會忽略索引,進行全表掃描,此時使用表鎖??墒褂?force index 強制使用索引。

操作步驟

1.事務1,執(zhí)行鼠標選中的內容

2.事物2,執(zhí)行鼠標選中的內容

你會發(fā)現事物2會一直轉圈圈,其實在執(zhí)行update的時候,已經是表鎖了。導致事物2 進行行鎖的時候,需要等待事物1的釋放

現在,我們使用強制鎖進行更新操作。

當你使用強制索引的時候,就會發(fā)現更新成功了。

當然數據重復降低,也是能成功的

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • mysql?8.0版本更換用戶密碼的方法步驟

    mysql?8.0版本更換用戶密碼的方法步驟

    這篇文章主要給大家介紹了關于mysql?8.0版本更換用戶密碼的方法步驟,MySQL用戶密碼的修改是經常面臨的一個問題,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • MySQL實現簡單的創(chuàng)建庫和創(chuàng)建表操作方法

    MySQL實現簡單的創(chuàng)建庫和創(chuàng)建表操作方法

    MySQL是最常用的數據庫,在數據庫操作中基本都是增刪改查操作,簡稱CRUD,這篇文章主要給大家介紹了關于MySQL實現簡單的創(chuàng)建庫和創(chuàng)建表操作方法的相關資料,需要的朋友可以參考下
    2023-11-11
  • 超詳細MySQL8.0.22安裝及配置教程

    超詳細MySQL8.0.22安裝及配置教程

    這篇文章主要介紹了超詳細MySQL8.0.22安裝及配置教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Windows10下MySQL5.7.19安裝教程 MySQL忘記root密碼修改方法

    Windows10下MySQL5.7.19安裝教程 MySQL忘記root密碼修改方法

    這篇文章主要為大家詳細介紹了Windows10下MySQL5.7.19安裝教程,以及MySQL忘記root密碼的修改方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • mysql5.7安裝教程(windows)

    mysql5.7安裝教程(windows)

    這篇文章主要為大家詳細介紹了windows下mysql5.7安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • mysql之DML的select分組排序方式

    mysql之DML的select分組排序方式

    在此教程中,我們詳細介紹如何創(chuàng)建員工(employee)和部門(department)數據庫表,并展示了如何通過SQL語句進行數據插入、刪除和查詢,首先,創(chuàng)建了部門表并自動設置部門編號起始值為1001,接著創(chuàng)建員工表并定義了各字段,我們還設置了外鍵關聯兩表
    2024-09-09
  • MySQL與PHP的基礎與應用專題之自連接

    MySQL與PHP的基礎與應用專題之自連接

    MySQL是一個關系型數據庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),屬于 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統(tǒng)之一,本系列將帶你掌握php與mysql的基礎應用,本篇從自連接開始
    2022-02-02
  • MySQL慢查詢日志的配置與使用教程

    MySQL慢查詢日志的配置與使用教程

    慢查詢日志用于記錄一些過慢的查詢語句,可以幫助管理員分析問題所在,下面這篇文章主要給大家介紹了關于MySQL慢查詢日志的配置與使用教程,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2017-09-09
  • MySQL執(zhí)行時間的查詢

    MySQL執(zhí)行時間的查詢

    這篇文章主要介紹了MySQL執(zhí)行時間的查詢,查詢頻繁的數據庫和查詢執(zhí)行時間長的sql,文章中有詳細的代碼實例,感興趣的同學可以參考閱讀
    2023-04-04
  • MySQL與PHP的基礎與應用專題之數據查詢語句

    MySQL與PHP的基礎與應用專題之數據查詢語句

    MySQL是一個關系型數據庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),屬于 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統(tǒng)之一,本系列將帶你掌握php與mysql的基礎應用,本篇從數據查詢語句開始
    2022-02-02

最新評論