Mysql的锁(锁和X锁的区别)

  

<>强共享锁和排它锁

  
  

Mysql的锁系统:共享锁和互斥型锁(共享锁和排它锁,也叫读锁和写锁,即读锁和写锁)

     

读锁是共享的,或者说是相互不阻塞的
写锁是排他的,一个写锁会阻塞其他的写锁和读锁
在实际的数据库系统中,每时每刻都发生锁定,当某个用户在修改某部分数据1时,mysql会通过1锁定阻止其他用户对统一数据的读取。

  

<>强共享锁锁【年代】

  

又称读锁,若事务T对数据对象一个加上的锁,则事务T可以读一个但不能修改,其他事务只能再对一个加锁,而不能加X锁,直到T释放一个上的S锁。

  

这保证了其他事务可以读,但在T释放一个上的年代锁之前不能对一个做任何修改。

  

<>强排他锁【X锁】

  

又称写锁。若事务T对数据对象一个加X锁上,事务T可以读一个也可以修改,其他事务不能再对一个加任何锁,直到T释放一个上的锁。

  

这保证了其他事务在T释放一个上的锁之前不能再读取和修改A .

  

排他锁用法:<代码>更新,比如,选择更新名称从表id=1;

  

<>强锁的粒度和锁的策略

  

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

  

MyISAM和内存存储引擎采用的是表级锁(表级锁);BDB存储引擎采用的是页面锁(页面级锁),但也支持表级锁;InnoDB存储引擎既支持行级锁(行级别锁定),也支持表级锁,但默认情况下是采用行级锁。

  

MySQL这3种锁的特性可大致归纳如下:

  <人力资源/>   
      <李>表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。   
  <人力资源/>   
      <李>行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。   
  <人力资源/>   
      <李>页面锁:开销和加锁时间界于表锁和行锁之间,会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。   
  <人力资源/>

Mysql的锁(锁和X锁的区别)