****在innodb下,加锁之前,为什么需要先start transaction?****
innodb下锁的释放在事务提交/回滚之后,事务一旦提交/回滚之后,就会自动释放事务中的锁。
innodb情况下autocommit=1即开启自动提交,在自动提交模式下,每执行一句sql,就自动提交事务,锁也会立即释放。这种情况下无法手动控制事务的提交以及锁的释放时间。
因此,我们会在进行锁的相关操作之前,先start transaction(关闭自动提交模式,开启手动提交模式),这样事务中的每一行sql执行完成后,锁一直不会释放,直到我们手动提交事务,锁才会释放。
****检索条件使用索引和不使用索引的锁区别****
检索条件有索引的情况下会锁定特定的一些行。
检索条件没有使用使用的情况下会进行全表扫描,从而锁定全部的行(包括不存在的记录)。
****检索条件使用索引和不使用索引的锁区别****
MySQL下innodb引擎加锁原则,遵循二段锁协议,即上锁分为两个阶段,事务开始后进入加锁阶段,事务commit或者rollback就进入解锁阶段。这样的好处在于可以在并发事务的时候串行化处理。
****innodb下锁的影响因素****
innodb引擎下,锁的影响因素很多,隔离级别不同,是否使用索引等都会产生不同的锁结果,因此要想学会innodb下锁的分析,我们需要具备以下的知识,才能更好的理解锁。
- 隔离级别的作用
- 分析事务中sql的执行计划,是否使用索引或者权标扫描。
****innodb下到底有多少钟锁?****
相比于myisam引擎,innodb下锁的种类更为多样和复杂,大概有如下几种锁:
(1)共享锁,排他锁,意向共享锁,意向排他锁
(2)记录锁,间隙锁,next-key锁
(3)悲观锁,乐观锁