数据库 锁

 

数据库 锁


MySQL有三种锁的级别:页级、表级、行级。

  MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);

  BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;

  InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。

MySQL这3种锁的特性可大致归纳如下:
1、表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

      表级锁让多线程可以同时从数据表中读取数据,但是如果另一个线程想要写数据的话,就必须要先取得排他访问(默认加排         他表锁);(共享读锁(Table Read Lock))

  更新数据时,必须要等到更新完成了,其他线程才能访问(读)这个表。(独占写锁(Table Write Lock))

2、行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

3、页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

原则上数据表有一个读锁时,其它进程无法对此表进行更新操作,但在一定条件下,MyISAM表也支持查询和插入操作的并发进行。