mysql增删改查会锁表吗_增删改查操作下锁的相关情况_增删
改时的锁分析
摘要:上⼀篇分析了查询时的锁情况,本篇将对剩下的增删改情况进⾏分析
注:该篇中关于锁的申请说明并不是锁的申请顺序,⽽是锁的⼤概层次申请
新增时的锁的情况
⽆索引情况:
锁情况如图:
锁申请说明:
(1).在数据库上申请共享锁,防⽌数据库结构变更
(2).对应的表上申请意向排它锁
(3).在对应的数据页上申请意向排它锁
(4).在数据所在⾏上申请排它锁
只有⾮聚集索引
锁情况:
锁申请说明:
⾮聚集的情况跟⽆索引的差不多,只不过增加了索引所在页⾯的意向排它锁以及索引键值上的排它锁
只有聚集索引
锁情况:
to be continued锁申请说明:
(1).在数据库上申请共享锁,防⽌数据库结构变更
(2).对应的表上申请意向排它锁
(3).在对应的数据页上申请意向排它锁
java工作内容是什么(4).在数据所在键值上申请排它锁
聚集、⾮聚集索引共存情况
锁申请说明:
(1).在数据库上申请共享锁,防⽌数据库结构变更
(2).对应的表上申请意向排它锁
(3).在聚集、⾮聚集索引所对应的数据页上申请意向排它锁
(4).在聚集、⾮聚集所因对应的键值上申请排它锁
新增数据的影响总结
从以上的数据来看,添加数据是很少会造成堵塞、死锁的,只是影响⾃⾝相关的索引、页⾯之类的,会产⽣争抢资源的情况有:
1.数据库要改变结构(基本不可能)
2.表结构变更(极少)
3.数据页发⽣拆分 (少,需要并发且同时处理同⼀页⾯且导致页⾯拆分,⽽这种情况我还不确定会不会),这种的话建议表上字段尽量不要过⼤(例如:varchar(2000)),这样发⽣的可能就⾮常少
注:为了准确分析出实际情况,删除、更新操作要对多条数据进⾏处理,同时为了更好的进⾏测试,表中数据增加⾄1千个
删除数据时锁的情况
⽆索引情况:
锁情况如图:
锁的申请情况:
(1).在数据库上申请共享锁,防⽌数据库结构变更
(2).对应的表上申请意向排它锁
(3).在相关搜索过的页⾯上申请意向更新锁,在数据所在页⾯上申请意向排它锁
(4).在数据所在⾏上申请排它锁
只有⾮聚集索引
御剑情缘字体颜代码
锁情况如图:
锁的申请情况:
(1).在数据库上申请共享锁,防⽌数据库结构变更
(2).对应的表上申请意向排它锁
mysql菜鸟教程增删改查(3).在索引以及数据所在页⾯上申请意向排它锁
(4).在索引所在键值上申请排它锁,在数据所在⾏上申请排它锁只有聚集索引
锁情况如图:
锁申请说明:
(1).在数据库上申请共享锁,防⽌数据库结构变更
(2).对应的表上申请意向排它锁
(3).在对应的数据页上申请意向排它锁
(4).在数据所在键值上申请排它锁
聚集、⾮聚集索引共存情况
执⾏计划:
锁情况如图:
锁申请说明:
(1).在数据库上申请共享锁,防⽌数据库结构变更
field是什么牌子(2).对应的表上申请意向排它锁
(3).在对应的聚集索引页、⾮聚集索引页上申请意向排它锁
(4).在数据所在聚集索引、聚集索引键值上申请排它锁
删除数据的影响总结
从它的锁申请情况来看,删除操作是先执⾏查询,然后再对相应的数据进⾏删除,其影响的话主要有以下⼏点:
1.⽆索引情况下,所有被查询到的数据页上都会申请意向更新锁(如果遍历所有数据的话,则所有数据页都申请),表越⼤的话,申请的锁就越多
2.删除操作不仅是把数据⾏本⾝进⾏删除,⽽且还会删除所有相关的索引键,所以在搜索数据时,还会锁上所有相关的锁。所以⼀个表上索引数⽬越多,操作的锁的数⽬就越多,就越容易产⽣堵塞
所以在⼀个⼤表上,既不能没有索引,也不能建⽴过多的索引,⽽是适当的在有需要的字段上建⽴合适的索引
更新时的锁的情况
⽆索引情况:
锁情况如图:
锁的申请情况:
(1).在数据库上申请共享锁,防⽌数据库结构变更
(2).对应的表上申请意向排它锁
(3).在相关搜索过的页⾯上申请意向更新锁,在数据所在页⾯上申请意向排它锁
java启动设置环境变量(4).在数据所在⾏上申请排它锁
只有⾮聚集索引
执⾏计划:
锁情况如图:
锁的申请情况:
(1).在数据库上申请共享锁,防⽌数据库结构变更
(2).对应的表上申请意向排它锁
(3).因为没有⾛索引,⽽是进⾏表扫描,所有被扫描的页⾯申请了意向更新锁,在索引以及数据所在页⾯上申请意向排它锁
(4).在索引所在键值上申请排它锁,在数据所在⾏上申请排它锁
只有聚集索引
执⾏计划:
锁情况如图:
锁申请说明:
(1).在数据库上申请共享锁,防⽌数据库结构变更
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论