深入理解Mysql事务隔离级别以及锁机制<2>

为什么会有锁 
 我就可以加锁来控制并发,比如说 我读取数据的时候 比方说id是101  我在数据库级别加一把锁 除非我吧这个事务提交,在当前事务没有提交之前 其他的事务 是不能做任何操作的
 

在这里插入图片描述

乐观锁 基于版本号 对比来实现 
悲观锁 比方说update一张表  假设id=2 sql语句会加一个行锁 吧这一行加一个锁 只要我事务没有提交之前,
 我这条sql实际上是会吧这行锁住的
 此时再开一个事务 再去更新这同一行事务 他会一直在这一行阻塞等待  []此时会涉及到事务之间相互等待  这种锁就叫悲观锁
表锁 是锁住某一个表  
 通过lock指令就可以增加表锁,对整张表加锁
表锁是一般的应用场景
 dba 对整张表做数据迁移的时候 为了防止 在迁移过程中 数据可能可能会有变动导致数据不完整
加个读锁 此时其他事务就不能修改成功
然后我做迁移
我锁住整张表 另外的事务不可能对这个锁做一些 比如说修改操作 所以此时不会出现死锁
发生锁冲突的概率变高 因为我对整张表都加锁  我后面所有操作
只要对这张表 任何一行记录去加锁的话 都会发生冲突
所以发生冲突的概率 比较高 

在这里插入图片描述

手动增加表锁 lock table 表名称 read(write),表名称2 read(write); 查看表上加过的锁 show open tables;
删除表锁 unlock tables;
比如说一下


在这里插入图片描述

行锁  锁的粒度比表锁要小  12行  
	 我只锁一行
innerdb支持行级锁 myisam 不支持行锁 
innerdb支持事务  myisam 不支持事务

一个session开启事务更新不提交,另一个session更新同一条记录会阻塞,更新不同记录不会阻塞

在这里插入图片描述

事务的隔离级别

在这里插入图片描述

https://blog.csdn.net/llllllkkkkkooooo/article/details/108068919
看大佬演示

猜你喜欢

转载自blog.csdn.net/weixin_43689953/article/details/121133404