一、数据库为什么需要锁?
为了保证数据的一致性。mysql数据库存在多种数据引擎,MySQL各存储引擎使用了三种类型(级别)的锁定机制:表级锁定,行级锁定和页级锁定。
二、表级锁
1.表级锁(表级锁一次会将整个表锁定,所可以很好的避免死锁问题)
(1)锁定粒度大,锁冲突概率高、并发度低;
(2)好处是不会出现死锁、开销小、获取锁和释放锁的速度很快;
(3)使用表级锁定的主要是MyISAM,MEMORY,CSV等一些非事务性存储引擎,适用于以查询为主,少量更新的应用。
三、行级锁
1.行级锁
(1)好处是锁定对象的颗粒度很小,发生锁冲突的概率低、并发度高;
(2)缺点是开销大、加锁慢,行级锁容易发生死锁;
(3)使用行级锁定的主要是InnoDB存储引擎、及分布式存储引擎NDBCluster等。适用于对事务完整性要求较高的系统。InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁。
2.InnoDB行级锁类型
(1)共享锁:又称读锁,简单讲就是多个事务对同一数据进行共享一把锁,都能访问到数据,但是只能读不能修改。
(2)排他锁:又称写锁,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,只有获取排他锁的事务可以对数据进行读取和修改。
(3)意向锁是InnoDB自动加的,不需用户干预。意向锁不会与行级的共享 / 排他锁互斥!!!