《SQL必知必会》读书笔记(一)
《 SQL 必知必会》读书笔记(一)
锁
在程序开发中,多个线程并发访问某个数据时,就需要加锁,以确保数据的完整性和一致性。
在数据库中加锁也是一样的,为了保证数据的一致性。且数据库中不同的隔离级别都是通过锁来实现的。
锁可以分为乐观锁和悲观锁。
乐观锁
乐观锁(Optimistic Locking)是一种思想,认为对同一数据的并发操作不会总发生,属于小概率事件,不用每次都对数据上锁,也就是不采用数据库自身的锁机制,而是通过程序来实现。
可以采用版本号机制或者时间戳机制实现。在更新提交时,将当前(版本号 / 时间戳)与更新之前的取得的(版本号 / 时间戳)进行比较,两者一致则更新成功,否则即为版本冲突。
适合读操作多的场景。
悲观锁
悲观锁(Pessimistic Locking)也是一种思想,对数据被其他事务的修改持保守态度,会通过数据库自身的锁机制来实现,从而保证数据操作的排它性。
适合写操作多的场景。
共享锁
共享锁锁定的资源可以被其他用户读取,但不能对其进行修改。
排他锁
排他锁锁定的数据只允许进行锁定操作的事务使用,其他事务无法对已锁定的数据进行查询或修改。
意向锁
当上共享锁或排他锁时,数据库会自动给更大一级的空间加上意向锁。此时,其它事务就不能进行(全页 / 全表)的相应操作。
行锁、页锁、表锁
三者差别仅仅是锁定对象的粒度大小不同,分别按照行、页、数据表的粒度对数据进行锁定。
发生锁冲突的概率依次增大,并发度与锁的开销依次减小。
不同的数据库和存储引擎支持的锁粒度不同。
Subscribe to bbbiggest's blog
Get the latest posts delivered right to your inbox