Mysql锁
锁是计算机协调多个进程后线程并访问某一资源的机制。
表级锁:开销小,加锁快;不会出现死锁;锁的粒度大,发生锁冲突的概概率最高,并发最低
行级锁:开销大,加锁慢;不会死锁;锁定粒度最小,发生冲突的概率低,并发度也最高
MyISAM表锁(查询多的地方)
Mysql的表级锁有两种模式:表共享读锁和表独占写锁
写锁:左边窗口lock table nihao write锁住,右边查询,无法查出数据
当左边unlock table的时候,右边立马查询出数据
这个窗口的增删改查都可以进行,另外的窗口不行
读锁:谁都不可以写,不管是哪个线程
注意:MyISAM在执行查询语句之前,会自动给涉及的所有表加读锁,在执行更新操作前,会自动给涉及的表加写锁,这个过程并不需要用户干预,因此用户一般不需要使用命令来显示加锁。
InnoDB锁(增删改多的地方)
1、事务及其ACID属性
事务是由一组SQL语句组成的逻辑处理单元,事务具有4个属性,通常称为事务的ACID属性
原子性、一致性、隔离性、持久性
2、并发事务处理带来的问题
相对于串型处理来说,并发事务处理能大大增加数据库资源的利用率,提高数据库系统的事务吞吐量,从而可以支持更多用户并发操作,与此同时会带来一些列的问题
脏读、不可重复读、幻读
InnoDB的行锁模式及加锁方法
共享锁:读锁,允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁
排它锁:写锁,允许获取排它锁的事务更新数据,阻止其他事务获取相同的数据集共享锁和排他写锁
InnoDB行锁实现方式
InnoDB行锁是通过给索引上的索引项加锁来实现的,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁