《MySQL中的锁》要点: 本文介绍了MySQL中的锁,希望对您有用。如果有疑问,可以联系我们。

概述 MyISAM支持表锁,InnoDB支持表锁和行锁,默认为行锁 表级锁:开销小,加锁快,不会出现死锁.锁定粒度大,产生锁冲突的概率最高,并发量最低 行级锁:开销大,加锁慢,会出现死锁.锁力度小,产生锁冲突的概率小,并发度最高
MyISAM表级锁锁模式 show status like 'table%' 可以阐发锁争夺情况 表级锁分为两种模式:共享读锁,独有写锁 读读共享,读写互斥,写写互斥,写读互斥(好比写读互斥,当一个用户对user表进行写的时候,会阻塞其他用户的写操作和读操作)
加表锁 在select的时候自动加读锁,在update delete insert时,自动加写锁 一般不必要用户用lock table 命令直接显式加锁
显示加表锁时 session1显示给user表加锁 lock table user read; session1此时不克不及读取未锁定的class表,所以lock table时要一次性锁定要用到的表 session1此时不克不及进行更新和插入,只能进行读取 其他session可以读取user表,然则更新会阻塞,而插入不会阻塞(可以通过设置concurrent_insert 系统变量来控制并发插入行为) 
锁调剂 当一个进程哀求user表的读锁,一个进程哀求user表的写锁,即使读哀求先到,也是哀求写锁成先成功 所以,MyISAM不适合年夜量的更新,因为年夜量更新会导致查操作很难获得读锁
InnoDB行级锁行锁 通过 show status like 'InnoDB_row_lock' 来阐发行锁争夺情况 共享锁S:允许一个事务去读一行,阻止其他事务得到相同数据集的排他锁 排他锁X:允许得到排它锁的事务更新数据,阻止其他事务取得相同数据集的共享锁和排他锁
意向锁 所谓意向锁就是意图拿到锁,所以要获得共享锁时,必要先获得意向共享锁 意向共享所IS,一个事务给一个数据行加共享锁时,必需先获得表的IS锁 意向排它锁IX,一个事务给一个数据行加排他锁时,必需先获得该表的IX锁
间隙锁 范围查询时,好比select * from user where id>50,这个时候即使最大id为51,不仅会给符合条件的行加锁,也会给id大于51(不存在的记录)的加锁,这就是间隙锁 间隙锁办理了事务并发的幻读问题
兼容环境 锁 | S | X | IS | IX | |