亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術(shù)文章
文章詳情頁

一文帶你了解MySQL中的鎖機(jī)制

瀏覽:127日期:2023-02-18 16:43:52
目錄
  • 一.概述
    • 分類
  • 二.MyISAM表鎖
    • 如何加表鎖
    • 寫鎖演示
  • 三.InnoDB行鎖
    • 行鎖特點(diǎn)

一.概述

鎖是計(jì)算機(jī)協(xié)調(diào)多個(gè)進(jìn)程或線程并發(fā)訪問某一資源的機(jī)制(避免爭搶)。

在數(shù)據(jù)庫中,除傳統(tǒng)的計(jì)算資源(如CPU、RAM、I/O等)的爭用以外,數(shù)據(jù)也是一種供許多用戶共享的資如何保證數(shù)據(jù)并發(fā)訪問的一致性、有效性是所有數(shù)據(jù)庫必須解決的一個(gè)問題,鎖沖突也是影響數(shù)據(jù)庫并發(fā)訪問性能的一個(gè)重要因素。從這個(gè)角度來說,鎖對數(shù)據(jù)庫而言顯得尤其重要,也更加復(fù)雜。

分類

1、從對數(shù)據(jù)操作的粒度分

  • 表鎖:操作時(shí),會鎖定整個(gè)表。
  • 行鎖:操作時(shí),會鎖定當(dāng)前操作行。

2、從對數(shù)據(jù)操作的類型分

  • 讀鎖(共享鎖):針對同一份數(shù)據(jù),多個(gè)讀操作可以同時(shí)進(jìn)行而不會互相影響。
  • 寫鎖(排它鎖):當(dāng)前操作沒有完成之前,它會阻斷其他寫鎖和讀鎖。

相對其他數(shù)據(jù)庫而言,MySQL的鎖機(jī)制比較簡單,其最顯著的特點(diǎn)是不同的存儲引擎支持不同的鎖機(jī)制。下表中羅列出了各存儲引擎對鎖的支持情況:

存儲引擎表級鎖行級鎖MylSAM支持不支持lnnoDB支持支持MEMORY支持不支持BDB支持不支持

MySQL鎖的特性可大致歸納如下:

鎖類型特點(diǎn)表級鎖偏向MyISAM存儲引擎,開銷小,加鎖快;不會出現(xiàn)死鎖;鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)度最低。行級鎖偏向InnoDB存儲引擎,開銷大,加鎖慢;會出現(xiàn)死鎖;鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度也最高。

從上述特點(diǎn)可見,很難籠統(tǒng)地說哪種鎖更好,只能就具體應(yīng)用的特點(diǎn)來說哪種鎖更合適! 僅從鎖的角度來說:表級鎖更適合于以查詢?yōu)橹鳎挥猩倭堪此饕龡l件更新數(shù)據(jù)的應(yīng)用,如web應(yīng)用;

而行級鎖則更適合于有大量按索引條件并發(fā)更新少量不同數(shù)據(jù),同時(shí)又有并查詢的應(yīng)用,如一些在線事務(wù)處理(OLTP)系統(tǒng)。

二.MyISAM表鎖

MylSAM存儲引擎只支持表鎖

如何加表鎖

MylSAM在執(zhí)行查詢語句(SELECT)前,會自動(dòng)給涉及的所有表加讀鎖,在執(zhí)行更新操作(UPDATE、DELETE、INSERT等)前,會自動(dòng)給涉及的表加寫鎖,這個(gè)過程并不需要用戶干預(yù),因此,用戶一般不需要直接用LOCK TABLE命令給MylSAM表顯式加鎖。

讀鎖演示

create database test_lock;use test_lock; drop table tb_book ; create table tb_book(	id int(11) auto_increment,	name varchar(50) default null,	publish_time date default null,	status char(1) default null,	primary key (id))engine=myisam default charset=utf8; insert into tb_book values(null,"sql","2088-08-01","1");insert into tb_book values(null,"sql",20880908,"0");  create table tb_user(	id int(11) auto_increment,	name varchar(50) default null,	primary key (id)	)engine =myisam default charset=utf8; insert into tb_user values(null,"張三");insert into tb_user values(null,"李四"); -- 加讀鎖lock table tb_book read; select * from tb_book  ;-- 能正常輸出select * from tb_book tb ;-- 不能正常輸出,不能有別名update tb_book set status=1;-- 不能正常輸出 讀鎖:可讀不可改 select * from tb_user ;-- 不能正常輸出,當(dāng)鎖住一個(gè)表時(shí)也不能看其他表-- 解鎖unlock tables;

加了讀鎖后只能看自己的表,不能修改,也不能看其他的表

寫鎖演示

create table tb_book(	id int(11) auto_increment,	name varchar(50) default null,	publish_time date default null,	status char(1) default null,	primary key (id))engine=myisam default charset=utf8; insert into tb_book values(null,"sql","2088-08-01","1");insert into tb_book values(null,"sql",20880908,"0");  create table tb_user(	id int(11) auto_increment,	name varchar(50) default null,	primary key (id)	)engine =myisam default charset=utf8; insert into tb_user values(null,"張三");insert into tb_user values(null,"李四"); -- 加寫鎖lock table tb_book write; select * from tb_book  ;-- 能正常輸出select * from tb_book tb ;-- 不能正常輸出,不能有別名update tb_book set status=1;-- 可以修改 寫鎖:可讀可修改,但在沒有解鎖之前不能被其他人查看,會被掛起 select * from tb_user ;-- 不能正常輸出,當(dāng)鎖住一個(gè)表時(shí)也不能看其他表-- 解鎖unlock tables;

三.InnoDB行鎖

行鎖特點(diǎn)

行鎖特點(diǎn)︰偏向InnoDB存儲引擎,開銷大,加鎖慢;會出現(xiàn)死鎖;鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度也最高。

InnoDB與 MylSAM的最大不同有兩點(diǎn):一是支持事務(wù);二是采用了行級鎖。

行鎖模式

lnnoDB實(shí)現(xiàn)了以下兩種類型的行鎖。

1、共享鎖(S)∶又稱為讀鎖,簡稱s鎖,共享鎖就是多個(gè)事務(wù)對于同一數(shù)據(jù)可以共享一把鎖,都能訪問到數(shù)據(jù),但是只能讀不能修改。

2、排他鎖(x):又稱為寫鎖,簡稱x鎖,排他鎖就是不能與其他鎖并存,如一個(gè)事務(wù)獲取了一個(gè)數(shù)據(jù)行的排他鎖,其他事務(wù)就不能再獲取該行的其他鎖,包括共享鎖和排他鎖,但是獲取排他鎖的事務(wù)是可以對數(shù)據(jù)就行讀取和修改。

對于UPDATE、DELETE和INSERT語句,InnoDB會自動(dòng)給涉及數(shù)據(jù)集加排他鎖(x);

對于普通SELECT語句,InnoDB不會加任何鎖;

可以通過以下語句顯示給記錄集加共享鎖或排他鎖。

-- 行鎖 drop table is exists test_innodb_lock;create table test_innodb_lock(	id int(11),	name varchar(16),	sex varchar(1))engine=innodb; insert into test_innodb_lock values(1,"100","1"),									(2,"200","0"),									(3,"200","1"),									(4,"300","0"),									(5,"400","0"),									(6,"500","1"),									(7,"600","1"),									(1,"700","1"); create index index_id on test_innodb_lock(id);create index index_name on test_innodb_lock(name);

可以修改是因?yàn)樯厦娴男墟i只對id=1的那兩行加了排他鎖

到此這篇關(guān)于一文帶你了解MySQL中的鎖機(jī)制的文章就介紹到這了,更多相關(guān)MySQL鎖機(jī)制內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: MySQL
主站蜘蛛池模板: 欧美最爽乱淫视频播放黑人 | 日韩视频在线观看 | 久久久久久久久国产 | 九九精品免视看国产成人 | 香港a毛片免费全部播放 | 久久精品视频在线 | 国产区精品一区二区不卡中文 | 欧美一级看片免费观看视频在线 | 日本精品夜色视频一区二区 | 久久国产乱子伦精品免费不卡 | 97精品国产91久久久久久久 | 国产高清天干天天视频 | 亚洲欧洲久久久精品 | 久久久综合结合狠狠狠97色 | 国产精品一区在线播放 | 在线精品视频在线观看高清 | 精品国产欧美一区二区五十路 | 无圣光福利视频 | 草在线视频 | 日本丶国产丶欧美色综合 | 手机国产精品一区二区 | 亚洲最大激情中文字幕 | 国产成人亚洲综合一区 | 九九久久久久午夜精选 | 91香蕉国产线在线观看免费 | 欧洲免费无线码二区5 | 另类综合视频 | 午夜三级网 | 免费成人| 日韩三级影院 | 日本在线亚洲 | 伊人55影院 | 成人免费网址在线 | 国产三级小视频在线观看 | 波多野结衣一区在线 | 国产成人精品无缓存在线播放 | 国产情侣普通话刺激对白 | 精品欧美日韩一区二区 | 一级毛片在线播放 | 亚洲狠狠综合久久 | 99九九国产精品免费视频 |