MyISAM和InnoDB关于锁方面的区别是什么

区别

  • MyISAM默认用的是表级锁,不支持行级锁(不支持事务)
  • InnoDB默认用的是行级锁,也支持表记锁(支持事务)

读锁和写锁

理解

  • 读锁:也称共享锁,即一个共享锁在执行时,另一个共享锁也可以执行,并不阻塞.
  • 写锁:也称排他锁,当表加上了读锁或者写锁,需要等待它们释放才能加上新的写锁。

MyISAM

  • 默认情况下 MyISAM的select加的是读锁,update,insert,delete增加的是写锁

select可以加写锁:即在select语句后加上 for update
如:select * from user for update

  • 由于select的锁为读锁,所以在一个select时可以别的select并不阻塞,但update,insert,delete时阻塞(给整个表加锁)
  • update,insert,delete的锁为写锁,在操作时别的操作阻塞(表级锁)

InnoDB

  • InnoDB使用的是二段锁,即加锁和解锁是分两个步骤完成的,即先对同一个事务里的一批操作分别进行加锁,然后到commit的时候,在对事务里加上的锁进行统一的解锁
  • InnoDB在没有用到索引时,使用表级锁.当走索引时,使用行级锁
  • InnoDB对select进行了改进,select的操作并没有上锁
  • select默认是非阻塞读(不上锁),其他默认上行级写锁

为select语句上共享锁 :select * from user lock in share mode

MyISAM和InnoDB的适用场景

MyISAM

频繁执行全表count语句
对数据增删改频率不高、查询较为频繁
没有事务

InnoDB

增删改查都很频繁
可靠性要求比较高,需要支持事务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值