这段时间一直在学习mysql数据库。项目组一直用的是oracle,所以对mysql的了解也
本文来源gaodai.ma#com搞##代!^码网(
不深。本文主要是对mysql锁的总结。
Mysql的锁主要分为3大类:
表级锁:存储引擎为Myisam。锁住整个表,特点是开销小,加锁快,锁定力度大,发生锁冲突的概率最高,并发度最低。
页级锁:存储引擎为BDB。锁住某一页的数据(16kb左右),特点:开销和枷锁时间介于表级和行级之间;会出现死锁,锁定力度介于表锁和行锁之间,并发度一般。
行级锁:存储引擎为innodb。锁住某一行的数据,特点:锁的实现更加复杂,开销大,加锁速度慢。
根据以上特点,仅从锁的角度来说:表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用,如Web应用;而行级锁则更适合于有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用,如一些在线事务处理(OLTP)系统。
接下来进行行级锁的详解,行级锁主要分为以下7类:共享/排他锁、意向锁、记录锁、间隙锁、临建锁、插入意向锁、自增锁。
共享/排他锁:
共享锁:又称读锁,可以允许读,但不能写。共享锁可以与共享锁一起使用。语句:
select ... lock in share mode
排他锁:又称写锁,不能允许读,也不能允许写,排他锁不能与其他所一起使用。语句:
select ... for update
在mysql中,update,delete,insert,alter这些写的操作默认都会加上排他锁。Select默认不会加任何锁类型。一旦写数据的任务没有完成,数据是不能被其他任务读取的,这对并发操作有较大的影响。