自学内容网 自学内容网

mysql的锁机制

1、锁的介绍

  • 锁是计算机协调多个进程或线程并发访问某一资源的机制(避免争抢)
  • 在mysql中,除传统的计算资源如CPU、RAM、I/O等的争用外,数据也是一种供许多用户共享的资源,如何保证数据并发访问的一致性,有效性是数据库必须解决的问题,锁冲突也是影响数据库并发访问性能的一个重要因素

2、锁的分类

2.1、从对数据操作的力度分类:

  • 表锁:操作时会锁定整个表
  • 行锁:操作时锁定当前行

2.2、从对数据操作的类型分类:

  • 读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响
  • 写锁(排他锁):当前操作没有完成之前,它会阻断其他的写锁和读锁

3、mysql存储引擎对锁的支持

存储引擎表级锁行级锁
myISAM支持不支持
innoDB支持支持
memory支持不支持
BDB支持不支持

4、锁的特性

  • 表级锁:

    – 偏向myISAM,开销小,加锁快,不会出现死锁

    – 锁定力度大,发生冲突的概率最高,并发度最低

  • 行级锁:

    – 偏向innoDB,开销大,加锁慢,会出现死锁

    – 锁定力度小,发生冲突概率最低,并发度也最高

5、表级锁

  • myISAM存储引擎只支持表级锁

    – myISAM在执行select前会自动给涉及的所有表加读锁

    – myISAM在执行update、delete、insert等前,会自动给涉及的表加写锁

    – 所以用户一般不需要直接使用lock table命令给myISAM表显式加锁

  • 语法

    lock table table_name read;  --加读锁
    
    lock table table_name write; --加写锁
    

6、行锁

  • innoDB实现了两种类型的行锁

    – 读锁:又称共享锁(s),简称(s)锁,读锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但只能读不能写

    – 写锁:又称排它锁(x),简称(x)锁,写锁就是不能与其他锁并存,如一个事务获取了一个数据行的写锁,其他事务就不能再获取该行的其他锁,包括读锁和写锁,但获取写锁的事务可以对该行数据读取和修改。

  • 对于update、delete、insert语句,innoDB会自动给涉及的数据加写锁(x)

  • 对于select语句,innoDB不会加任何锁

  • 语法

    select * from table_name where ... lock in share mode;   --共享锁
    
    select * from table_name where ... for update;  --排他锁
    

原文地址:https://blog.csdn.net/CNDS7869/article/details/143806979

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!