久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      MySQL學(xué)習(xí)之聊聊InnoDB中鎖的情況

      本篇文章帶大家聊聊MySQL,介紹一下InnoDB中鎖的情況。有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)大家有所幫助。

      MySQL學(xué)習(xí)之聊聊InnoDB中鎖的情況

      mysql> select @@version; +-----------+ | @@version | +-----------+ | 5.7.21    | +-----------+ 1 row in set (0.01 sec)

      一,鎖的基本介紹

      相對(duì)其他數(shù)據(jù)庫而言,MySQL的鎖機(jī)制比較簡(jiǎn)單,其最顯著的特點(diǎn)是不同的存儲(chǔ)引擎支持不同的鎖機(jī)制。比如,MyISAM和MEMORY存儲(chǔ)引擎采用的是表級(jí)鎖(table-level locking);InnoDB存儲(chǔ)引擎既支持行級(jí)鎖(row-level locking),也支持表級(jí)鎖,但默認(rèn)情況下是采用行級(jí)鎖。

      表級(jí)鎖:開銷小,加鎖快;不會(huì)出現(xiàn)死鎖;鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)度最低。

      行級(jí)鎖:開銷大,加鎖慢;會(huì)出現(xiàn)死鎖;鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度也最高。

      行級(jí)鎖類型:

      Record Lock(記錄鎖):當(dāng)個(gè)記錄的鎖(鎖住單條記錄)

      記錄鎖只會(huì)鎖住索引的記錄,如果InnoDB存儲(chǔ)表在建立的時(shí)候沒有任何索引,那么這個(gè)鎖會(huì)使用隱式的主鍵來進(jìn)行鎖定,如下圖

      MySQL學(xué)習(xí)之聊聊InnoDB中鎖的情況

      Gap Lock(間隙鎖):鎖定一個(gè)范圍,不包括記錄本身(只鎖數(shù)據(jù)前面的GAP)

      如下圖為的鎖就是GAP鎖,就是不允許其他事務(wù)在索引列8之前的間隙插入新的記錄,也就是(3 , 8)這個(gè)區(qū)間。gap鎖 的作用僅僅是為了防止插入幻影記錄的而已

      MySQL學(xué)習(xí)之聊聊InnoDB中鎖的情況

      Next-Key Lock(臨鍵鎖):同時(shí)鎖住記錄和記錄前面的GAP,也就是Next-Key Lock = Record Lock + Gap Lock。

      MySQL學(xué)習(xí)之聊聊InnoDB中鎖的情況

      二,鎖的分類

      共享鎖 Share Locks (簡(jiǎn)稱S鎖,屬于行鎖)

      排它鎖 Exclusive Locks (簡(jiǎn)稱X鎖,屬于行鎖)

      意向共享鎖 Intention Share Locks (簡(jiǎn)稱IS鎖,屬于表鎖)

      意向排它鎖 Intention Exclusive Locks (簡(jiǎn)稱IX鎖,屬于表鎖)

      自增鎖 AUTO-INC Locks(屬于表鎖)

      下面具體介紹下每種類型的鎖,我們先建一張innodb的表,sql如下

      create table tab_with_index(id int,name varchar(10)) engine=innodb; alter table tab_with_index add index id(id); insert into tab_with_index values(1,'1'),(2,'2'),(3,'3'),(4,'4');

      共享鎖

      共享鎖就是多個(gè)事務(wù)對(duì)于同一個(gè)數(shù)據(jù)可以共享一把鎖,都能訪問數(shù)據(jù)庫,但是只能讀不能修改;

      事務(wù)A:

      select * from tab_with_index lock in share mode;

      事務(wù)B:

      select * from tab_with_index where id =1; // 可以查詢數(shù)據(jù)

      update tab_with_index set name = 'aa' where id = 1 ;

      注意:這里的修改語句會(huì)堵塞住,直到事務(wù)A提交之后才能操作成功。

      排它鎖

      排它鎖不能與其他鎖并存,如一個(gè)事務(wù)獲取了一個(gè)數(shù)據(jù)行的排它鎖,其他事務(wù)就不能在獲取該行的鎖,只有當(dāng)前獲取排它鎖的事務(wù)可以對(duì)數(shù)據(jù)進(jìn)行修改。(delete,update,create默認(rèn)是排它鎖)

      事務(wù)A:

      select * from tab_with_index where id =1 for update;

      事務(wù)B:

      select * from tab_with_index where id =1; //可以獲取結(jié)果

      select * from tab_with_index where id =1 for update; // 堵塞

      select * from tab_with_index where id = 1 lock for share mode; // 堵塞

      注意:事務(wù)B兩個(gè)sql都會(huì)堵塞住,也就是獲取不到共享鎖也獲取不到排它鎖,直到事務(wù)A提交之后才能操作成功。

      意向共享鎖和意向排它鎖

      意向共享鎖:表示事務(wù)準(zhǔn)備給數(shù)據(jù)行加入共享鎖,也就是說一個(gè)數(shù)據(jù)行在加共享鎖之前必須先獲取該表的IS鎖。

      意向排它鎖:表示事務(wù)準(zhǔn)備給數(shù)據(jù)行加入排它鎖,也就是說一個(gè)數(shù)據(jù)行加排它鎖之前必須先獲取該表的IX鎖。

      IS鎖和IX鎖是表級(jí)鎖,他們的提出僅僅為了在之后加表級(jí)別的S鎖和X鎖時(shí)可以快速判斷表中的記錄是否被上鎖,以避免用遍歷的方式來查看表中有沒有上鎖的記錄,也就是說其實(shí)IS鎖和IX鎖是兼容的,IX鎖和IX鎖是兼容的。 《MySQL是怎樣運(yùn)行的》

      自增鎖

      針對(duì)自增列自增長的一個(gè)特殊的表級(jí)別鎖。

      show variables like 'innodb_autoinc_lock_mode';  -- 默認(rèn)值1,代表連續(xù),事務(wù)未提交則ID永久丟失

      MySQL學(xué)習(xí)之聊聊InnoDB中鎖的情況

      三,InnoDB鎖

      1、事務(wù)及其ACID屬性

      事務(wù)是由一組SQL語句組成的邏輯處理單元,事務(wù)具有4屬性,通常稱為事務(wù)的ACID屬性。

      原子性(Actomicity):事務(wù)是一個(gè)原子操作單元,其對(duì)數(shù)據(jù)的修改,要么全都執(zhí)行,要么全都不執(zhí)行。 一致性(Consistent):在事務(wù)開始和完成時(shí),數(shù)據(jù)都必須保持一致狀態(tài)。 隔離性(Isolation):數(shù)據(jù)庫系統(tǒng)提供一定的隔離機(jī)制,保證事務(wù)在不受外部并發(fā)操作影響的“獨(dú)立”環(huán)境執(zhí)行。 持久性(Durable):事務(wù)完成之后,它對(duì)于數(shù)據(jù)的修改是永久性的,即使出現(xiàn)系統(tǒng)故障也能夠保持。

      2、并發(fā)事務(wù)帶來的問題

      相對(duì)于串行處理來說,并發(fā)事務(wù)處理能大大增加數(shù)據(jù)庫資源的利用率,提高數(shù)據(jù)庫系統(tǒng)的事務(wù)吞吐量,從而可以支持

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)