mysql索引与锁的关系_Mysql 的锁与索引的关系

mysql 锁与索引的关系

mysql的锁:(行锁,表锁,页锁) 与索引存在很大的关系,咱们平时在写sql的时候其实不多注意这个问题(估计是我的水平比较低,因此不多注意吧),那么在有索引和没有索引的时候数据库锁的策略是什么呢?mysql

首先咱们知道若是没有创建索引的话咱们在进行数据选取或者定位的时候是经过全表扫描的形式来进行的,好比存在这样一张表user(id,name,phone,address);而且这张表中并无任何索引,那么sql:delete from user where name='张三' 这样一个语句是如何定义到张三这个记录的,由于没有索引,因此在数据库实现的时候是对整张表进行扫描的,那么数据库是否是会把整张表锁定起来呢?咱们测试一下:sql

咱们先看看数据库表user的定义和数据,能够看到咱们没有定义任何索引,固然primarykey这默认是一个索引,可是这并不能影响咱们的操做。数据库

A. 首先咱们查看一下咱们的数据库表表结构和数据:测试

faf2a99d908eee1297adc2b0b4d122ab.png

3bf5871127b44efd93acdff1.html

能够发现咱们在这个表中出了主键(默认的惟一索引),并无额外定义索引。spa

A.咱们先测试一下,使用主键对数据库表进行操做会不会致使全表锁定。(由于mysql默认是autocommit=1,因此咱们应该手动控制事务)blog

584b6c4e2ecb92906a0ce4a37295464f.png

3bf5871127b44efd93acdff1.html

从上面咱们能够看到左边进程开启了一个事务,而且对id=1的数据进行修改,可是此刻并无进行提交,那么咱们确定是获取到了这一行的锁,在另一个进行中咱们一样对数据进行修改,发现数据修改为功了,那么能够证实:经过索引进行数据库锁定的时候并不会封锁表的其余记录。那么若是不是会封锁这条记录呢?索引

24009e35021943ffc6cd92122f25f9db.png

3bf5871127b44efd93acdff1.html

这样,咱们同时没有释放左边进程获得的锁,同时咱们更改被锁定的行:发现超时了,这是由于在innodb中(myisam中并不支持行锁)提供了主动判断死锁的方法,咱们经过设置innodb_lock_wait_timeout来决定发生死锁多长时间会主动回滚一个事务。这里能够发如今where出使用主键(默认的索引) 确实会致使表中被操做的这行数据被锁定。

进程

若是咱们更改的时候不使用索引,那么数据库锁定的粒度究竟是多大呢?事务

6dd5956db0aa638d1f3f297ee9039097.png

3bf5871127b44efd93acdff1.html

看A处开启事务,并更改了一行数据,可是并无使用索引,在这个时候是须要对表进行全盘扫描的,那么咱们在右边进程中再次对表中另外一个记录进行修改,结果:再次timeout。这里咱们能够得出一个结论: 不使用索引的数据库操做获取到的锁会致使整个表的锁定。it

温习一下就得知识: 看上图中AB 两处:为何左边提交事务右边再一次查看就可以看到事务呢?这是由于mysql默认的事务隔离级别为repeatable reader。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程简介: 课程总计41课时,从什么是事务讲起,直到分布式事务解决方案,很的0基础基础与提升系列课程。对于难以理解的知识点,全部用画图+实战的方式讲解。 第一部分:彻底明白事务的四个特性:原子性、一致性、隔离性、持久性,用场景和事例来讲解。 第二部分:实战讲数据库事务的6中并发异常:回滚丢失、覆盖丢失、脏读、幻读、不可重复读、MVCC精讲。 第三部分:彻底搞清楚4种事务隔离级别:READ_UNCOMMITTED 读未提交隔离级别、READ_COMMITTED 读已提交隔离级别、REPEATABLE_READ 可重复度隔离级别、SERIALIZABLE 序列化隔离级别 第四部分:彻底搞清楚MySQL的各种:行、表、共享、排它、Next-Key、间隙、X、S、IS、IX、死索引、意向等。 第五部分:彻底搞清楚Spring事务的7种传播级别的原理和使用:PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS、PROPAGATION_MANDATORY、PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER、PROPAGATION_NESTED分布式事务的理论基础:RPC定理、BASE理论、XA协议都是什么,原理是什么,有什么关联关系 第六部分:分布式事务的5种解决方案原理和优缺点:2PC两阶段提交法、3PC三阶段提交法、TCC事务补偿、异步确保策略、最大努力通知策略 第七部分:阿里巴巴分布式事务框架Seata:历经多年双十一,微服务分布式事务框架,用一个Nacos+Spring Cloud+Seta+MySql的微服务项目,实战讲解阿里的分布式事务技术,深入理解和学习Seata的AT模式、TCC模式、SAGA模式。 课程资料: 课程附带配套2个项目源码72页高清PDF课件一份阿里巴巴seata-1.1.0源码一份阿里巴巴seata-server安装包一份

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值