mysql 锁机制

myisam 索引记录的是数据地址,一定程度上可以直接拿去数据
innodb 索引记录的是主键,需要回表查询

======================
支持事务,采用行级锁
表锁(myisam偏多)
读锁(共享锁):当前用户仅能读当前表,不能修改,不能读其他表;其他用户修改阻塞等待,性能降低,读自由
写锁(排他锁):当前写操作没有完成前,其他都不能操作,当前可以增删查

简而言之,就是读锁会阻塞写,但是不会阻塞读,而写锁则会把读和写都堵塞。
show open tables 哪些锁被加锁了, 1为加锁
lock table mylock read;给mylock加读锁
unlock tables;解锁
update mylocl set name ='a2' where id=1
lock table mylock write; 写锁
 
 show status like 'table%';

在这里插入图片描述
行锁(偏向innodb):
事务ASID:原子性,一致性,隔离性,持久性

事务产生的四大问题
	1.更新丢失
	2.脏读:读到已修改尚未提交的数据
	3.不可重复读:事务a读取到事务b已经提交的修改的数据,不符合隔离性
	4.幻读:读到新增数据

3和4的区别在于产生幻读在于没办法控制Insert语句,而3也会产生4。

解决方案
	1.未提交读:解决1
	2.已提交读:解决1.2
	3.可重复读:解决1.2.3
	4.可序列化读:解决1.2.3.4

行级锁的操作
数据库底层使用线程加版本号的形式控制锁
CAS:compare and swap

CAP:一致性,可用性,分区容错性
区分开

间隙锁
当我们用范围条件而不是相等条件检索数据,并请求共享 或排他锁时,innodb会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做“间隙GAP”

innodb也会对这个“间隙”加索,这种锁机制就是所谓的间隙表(next-key锁)
某些情况会对效率产生严重损害
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值