MySQL--锁机制

本文详细介绍了数据库锁的分类,包括读写锁、表锁和行锁,重点对比了MyISAM和InnoDB引擎在锁机制上的差异,以及事务隔离级别的影响。同时提供了优化数据库性能的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.概述

1.1定义

1.2生活购物

1.3锁的分类

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

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

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

1.3.2从对数据操作的粒度分

1.表锁

2.行锁

2.三锁

2.1表锁(偏写)

2.1.1特点

偏写MyISAM粗才能引擎,开销小,加锁快;无死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

2.1.2案例分析

2.1.2.1建表SQL

2.1.2.2加读锁

2.1.2.3加写锁

2.1.3案例结论

2.1.4表锁分析

2.2行锁(偏写)

2.2.1特点

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

2.InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION);二是采用了行级锁

2.2.2由于行锁支持事务,复习老知识

2.2.2.1事务(Transaction)及其ACID属性

2.2.2.2并发事务处理带来的问题

1.更新丢失(Lost Update)

2.脏读(Dirty Reads)

3.不可重复读(Non-Repeatable Reads)

4.幻读(Phantom Reads)

2.2.2.3事务隔离级别

2.2.3案例分析

2.2.3.1建表SQL

2.2.3.2行锁定基本演示

2.2.3.3无索引行锁升级为表锁
2.2.3.4间隙锁危害

2.2.3.5常考如何锁定一行

2.2.4案例结论

2.2.5行锁分析

2.2.6优化建议

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

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

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

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

5.尽可能低级别事务隔离

2.3页锁

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值