最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你了解MySQL中的鎖機制

 更新時間:2023年02月17日 16:55:45   作者:陽862  
鎖是計算機協(xié)調多個進程或線程并發(fā)訪問某一資源的機制(避免爭搶)。本文就來通過幾個簡單的實力為大家詳細講講MySQL中的鎖機制吧

一.概述

鎖是計算機協(xié)調多個進程或線程并發(fā)訪問某一資源的機制(避免爭搶)。

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

 分類

1、從對數據操作的粒度分

  • 表鎖:操作時,會鎖定整個表。
  • 行鎖:操作時,會鎖定當前操作行。

2、從對數據操作的類型分

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

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

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

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

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

從上述特點可見,很難籠統(tǒng)地說哪種鎖更好,只能就具體應用的特點來說哪種鎖更合適! 僅從鎖的角度來說:表級鎖更適合于以查詢?yōu)橹?,只有少量按索引條件更新數據的應用,如web應用;

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

二.MyISAM表鎖

MylSAM存儲引擎只支持表鎖

如何加表鎖

MylSAM在執(zhí)行查詢語句(SELECT)前,會自動給涉及的所有表加讀鎖,在執(zhí)行更新操作(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存儲引擎,開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度也最高。

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鎖機制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 關于對mysql語句進行監(jiān)控的方法詳解

    關于對mysql語句進行監(jiān)控的方法詳解

    這篇文章主要給大家介紹了關于對mysql語句進行監(jiān)控的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用mysql具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-07-07
  • MYSQL索引無效和索引有效的詳細介紹

    MYSQL索引無效和索引有效的詳細介紹

    MYSQL索引無效和索引有效的詳細介紹,需要的朋友可以參考一下
    2013-05-05
  • sql與各個nosql數據庫使用場景的講解

    sql與各個nosql數據庫使用場景的講解

    今天小編就為大家分享一篇關于sql與各個nosql數據庫使用場景的講解,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 深入了解MySQL鎖機制及應用場景

    深入了解MySQL鎖機制及應用場景

    MySQL鎖是操作MySQL數據庫時常用的一種機制。MySQL鎖可以保證多個用戶在同時執(zhí)行讀寫操作時,能夠互相協(xié)同、避免數據出現不一致或者讀寫沖突等問題。本篇文章將詳細介紹MySQL鎖的基本知識和具體應用
    2023-03-03
  • mysql不同數據庫不同數據表導入數據

    mysql不同數據庫不同數據表導入數據

    這篇文章主要介紹了mysql不同數據庫不同數據表導入數據的相關資料,需要的朋友可以參考下
    2015-07-07
  • Mysql學習心得之插入、更新、刪除記錄

    Mysql學習心得之插入、更新、刪除記錄

    在程序開發(fā)過程中,離不開數據庫,數據庫離不開增刪改查操作,下面小編把我對mysql學習之插入、更新、刪除記錄心得總結分享給大家,需要的朋友可以參考下
    2015-08-08
  • 游戲和服備忘問題簡析

    游戲和服備忘問題簡析

    這篇文章主要介紹了游戲和服備忘問題簡析,小編覺得挺不錯的,這里分享給大家,希望給大家一個參考。
    2017-10-10
  • mysql解決遠程不能訪問的二種方法

    mysql解決遠程不能訪問的二種方法

    mysql解決遠程不能訪問的二種方法,需要的朋友可以參考一下
    2013-04-04
  • MySQL需要關注的參數及狀態(tài)變量解讀

    MySQL需要關注的參數及狀態(tài)變量解讀

    這篇文章主要介紹了MySQL需要關注的參數及狀態(tài)變量解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • MySQL性能優(yōu)化的最佳20+條經驗

    MySQL性能優(yōu)化的最佳20+條經驗

    這篇文章主要為大家詳細介紹了MySQL性能優(yōu)化的最佳20+條經驗,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09

最新評論

吉安市| 岳普湖县| 海南省| 潜山县| 阳曲县| 卢湾区| 临夏市| 阿图什市| 西乡县| 南投县| 大港区| SHOW| 乡城县| 民权县| 巴马| 武功县| 铜鼓县| 望都县| 六枝特区| 开平市| 鄂托克旗| 积石山| 天峻县| 宝应县| 通渭县| 普安县| 宁城县| 汉源县| 略阳县| 贵州省| 邯郸县| 土默特右旗| 南京市| 堆龙德庆县| 太仆寺旗| 普安县| 漳州市| 乾安县| 仁化县| 舞阳县| 正阳县|