mysql锁机制

一、锁分类 

1.从对数据操作的类型(读\写)分

读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。

写锁(排它锁):当前写操作没有完成前,它会阻断其他写锁和读锁。

2.从对数据操作的粒度分

开销、加锁速度、死锁、粒度、并发性能,只能就具体应用的特点来说那种锁更合适

表锁(偏读)

行锁(偏写)

页锁

二、表锁

1.特点:

偏向MyISAM存储引擎,开销小,加锁快;无死锁;锁定粒度打,发生锁冲突的概率最高,并发读最低。

2.案例分析

建表sql

 2.1.手动增加表锁

lock table 表名字 read(write),表名字2 read(write)

lock table mylock read,book write;

查看表上加过的锁

show open tables;

释放锁

unlock tables;

2.2.加读锁

2.3加写锁

 

3.案列结论

简而言之,就是读锁会阻塞写,但是不会阻塞读,而写锁则会把读和写都阻塞

4.表锁分析

 

三、行锁

1.特点

偏向InnoDB存储引擎,开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

InnoDB与MyISAM的最大不同:一是支持事务;二是采用了行级锁

2.复习老知识

并发事务处理带来的问题

更新丢失(Lose Update)

脏读(Dirty Reads)

不可重复读(Non-Repeatable Reads)

幻读(Phantom Reads)

 

3.案例分析

3.1建表sql

3.2行锁定基本演示

set autocommit=0;取消自动提交

set autocommit=1;设置自动提交

3.3无索引行锁升级为表锁

字段b是varchar 并且是加了索引,现在索引失效,

3.4间隙锁危害

3.5如何锁定一行

4.案例结论

5.行锁分析

6.优化建议

尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁。

合理设计索引,尽量缩小锁的范围。

尽可能较少检索条件,避免间隙锁。

尽量控制事务大小,减少锁定资源量和时间长度。

尽可能低级别事务隔离。

四、页锁(了解)

开销和加锁时间介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般。 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值