MySQL:行锁、表锁、乐观锁、悲观锁、读锁、写锁
1、锁的分类 1.1从对数据操作的类型来分 读锁(共享锁): 针对同一份数据,多个读操作可以同时进行而不会互相影响。 结论1: --如果某一个会话 对A表加了read锁,则 该会话 可以对A表进行读操作、不能进行写操作; 且 该会话不能对其他表进行读、写操作。 --即如果给A表加了读锁,则当前会话只能对A表进行读操作。 结论2: 会话0给A表加了锁;其他会话的操作:a.可以对其他表(A表以外的表)进行读、写操作 b.对A表:读-可以; 写-需要等待释放锁。、 某回话给某个表加了读锁,所有的回话都能对该表进行读操作,不能进行写操作,除非该会话释放读锁。 写锁(排它锁) :当前写操作没有完成前,它会阻断其他写锁和读锁。 当前会话(会话0) 可以对加了写锁的表 进行任何操作(增删改查);但是不能 操作(增删改查)其他表 其他会话:对会话0中加写锁的表 可以进行增删改查的前提是:等待会话0释放写锁 2.2 从 锁粒度划分。 一般分为:行锁、表锁、库锁 (1)行锁: 访问数据库的时候,锁定整个行数据,防止并发错误。 如InnoDB存储引擎使用行锁 (2) 表锁 : 访问数据库的时候,锁定整个表数据,防止并发错误。 如MyISAM存储引擎使用表锁