数据库两大神器索引和锁( 六 )

参考资料:

  • ***/?p=771#_Toc374698322***blogs.com/LBSer/p/5183300.html
2.6锁总结
上面说了一大堆关于MySQL数据库锁的东西,现在来简单总结一下 。
表锁其实我们程序员是很少关心它的:
  • 在MyISAM存储引擎中,当执行SQL语句的时候是自动加的 。在InnoDB存储引擎中,如果没有使用索引,表锁也是自动加的 。
现在我们大多数使用MySQL都是使用InnoDB,InnoDB支持行锁:
  • 共享锁--读锁--S锁排它锁--写锁--X锁
在默认的情况下,select是不加任何行锁的~事务可以通过以下语句显示给记录集加共享锁或排他锁 。
  • 共享锁(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE 。排他锁(X):SELECT * FROM table_name WHERE ... FOR UPDATE 。
InnoDB基于行锁还实现了MVCC多版本并发控制,MVCC在隔离级别下的Read committed和Repeatable read下工作 。MVCC能够实现读写不阻塞!
InnoDB实现的Repeatable read隔离级别配合GAP间隙锁已经避免了幻读!
  • 乐观锁其实是一种思想,正如其名:认为不会锁定的情况下去更新数据,如果发现不对劲,才不更新(回滚) 。在数据库中往往添加一个version字段来实现 。悲观锁用的就是数据库的行锁,认为数据库会发生并发冲突,直接上来就把数据锁?。?其他事务不能修改,直至提交了当前事务
参考资料:
  • ***/p/29150809--Mysql锁总结***/mysteryhaohao/article/details/51669741--MySQL学习之——锁(行锁、表锁、页锁、乐观锁、悲观锁等)***/a/1190000015596126--MySQL InnoDB引擎锁的总结
三、总结
【数据库两大神器索引和锁】本文主要介绍了数据库中的两个比较重要的知识点:索引和锁 。他俩可以说息息相关的,锁会涉及到很多关于索引的知识~


推荐阅读