<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
鎖是計算機協調多個程序或執行緒並行存取某一資源的機制(避免爭搶)。
在資料庫中,除傳統的計算資源(如CPU、RAM、I/O等)的爭用以外,資料也是一種供許多使用者共用的資如何保證資料並行存取的一致性、有效性是所有資料庫必須解決的一個問題,鎖衝突也是影響資料庫並行存取效能的一個重要因素。從這個角度來說,鎖對資料庫而言顯得尤其重要,也更加複雜。
1、從對資料操作的粒度分
2、從對資料操作的型別分
相對其他資料庫而言,MySQL的鎖機制比較簡單,其最顯著的特點是不同的儲存引擎支援不同的鎖機制。下表中羅列出了各儲存引擎對鎖的支援情況:
儲存引擎 | 表級鎖 | 行級鎖 |
MylSAM | 支援 | 不支援 |
lnnoDB | 支援 | 支援 |
MEMORY | 支援 | 不支援 |
BDB | 支援 | 不支援 |
MySQL鎖的特性可大致歸納如下:
鎖型別 | 特點 |
表級鎖 | 偏向MyISAM儲存引擎,開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,並行度最低。 |
行級鎖 | 偏向InnoDB儲存引擎,開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,並行度也最高。 |
從上述特點可見,很難籠統地說哪種鎖更好,只能就具體應用的特點來說哪種鎖更合適! 僅從鎖的角度來說:表級鎖更適合於以查詢為主,只有少量按索引條件更新資料的應用,如web應用;
而行級鎖則更適合於有大量按索引條件並行更新少量不同資料,同時又有並查詢的應用,如一些線上事務處理(OLTP)系統。
MylSAM儲存引擎只支援表鎖
MylSAM在執行查詢語句(SELECT)前,會自動給涉及的所有表加讀鎖,在執行更新操作(UPDATE、DELETE、INSERT等)前,會自動給涉及的表加寫鎖,這個過程並不需要使用者干預,因此,使用者一般不需要直接用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 ;-- 不能正常輸出,當鎖住一個表時也不能看其他表 -- 解鎖 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 ;-- 不能正常輸出,當鎖住一個表時也不能看其他表 -- 解鎖 unlock tables;
行鎖特點︰偏向InnoDB儲存引擎,開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,並行度也最高。
InnoDB與 MylSAM的最大不同有兩點:一是支援事務;二是採用了行級鎖。
行鎖模式
lnnoDB實現了以下兩種型別的行鎖。
1、共用鎖(S)∶又稱為讀鎖,簡稱s鎖,共用鎖就是多個事務對於同一資料可以共用一把鎖,都能存取到資料,但是隻能讀不能修改。
2、排他鎖(x):又稱為寫鎖,簡稱x鎖,排他鎖就是不能與其他鎖並存,如一個事務獲取了一個資料行的排他鎖,其他事務就不能再獲取該行的其他鎖,包括共用鎖和排他鎖,但是獲取排他鎖的事務是可以對資料就行讀取和修改。
對於UPDATE、DELETE和INSERT語句,InnoDB會自動給涉及資料集加排他鎖(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);
可以修改是因為上面的行鎖只對id=1的那兩行加了排他鎖
到此這篇關於一文帶你瞭解MySQL中的鎖機制的文章就介紹到這了,更多相關MySQL鎖機制內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45