锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的知足。在DBMS中,能够按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。数据库
行锁多线程
锁定整个行数据,开销大,加锁慢,会出现死锁。锁定粒度小,发生锁冲突的几率低,并发度高。并发
表锁线程
锁定整个表数据,开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突几率高,并发度低。blog
悲观锁事务
每次取数据时都认为别人会修改,因此每次取数据的时候都会上锁,这样别人想拿这个数据就会被阻塞,直到它拿到锁。传统的关系型数据库里边就用到了不少这种锁机制,好比行锁,表锁等,读锁,写锁等,都是在作操做以前先上锁。适用于“写多读少”的场景。资源
乐观锁同步
每次取数据时都认为别人不会修改,因此不会上锁,可是在更新的时候会判断一下在此期间别人有没有去更新这个数据,能够使用版本号等机制。适用于“读多写少”的场景,这样能够提升吞吐量。数据库中的write_condition机制就是乐观锁。it
共享锁io
共享锁指的是对于多个不一样的事务,对同一个资源共享同一个锁。至关于对于同一把门,它拥有多个钥匙同样。共享锁也属于悲观锁的一种,经过在执行语句后面加上lock in share mode就加上共享锁了。