Java教程

数据库中锁的划分

本文主要是介绍数据库中锁的划分,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

按照锁粒度划分

行锁

锁定粒度小,锁冲突概率低,并发度高,开销大,加锁慢,容易死锁。

表锁

锁定粒度大,锁冲突概率高,并发度低,开销小,加锁快。

从数据库管理角度划分

共享锁

也叫读锁或S锁,共享锁锁定的资源可以被其他用户读取,但不能修改。

排它锁

也叫独占锁、写锁或X锁。排它锁锁定的数据只允许进行锁定操作的事务使用,其他事务无法对已锁定的数据进行查询或修改。

从程序员角度划分

乐观锁

不采用数据库自身的锁机制,而是通过程序来实现。

悲观锁

通过数据库自身的锁机制来实现,从而保证数据操作的排它性。

乐观锁和悲观锁的适用场景

乐观锁适合读操作多的场景,相对来说写的操作比较少。

悲观锁适合写操作多的场景,因为写的操作具有排它性。

避免死锁的发生的方法

  1. 如果事务涉及多个表,操作比较复杂,那么可以尽量一次锁定所有的资源,而不是逐步来获取,这样可以减少死锁发生的概率。

  2. 如果事务需要更新数据表中的大部分数据,数据表又比较大,这时可以采用锁升级的方式,比如将行级锁升级为表级锁,从而减少死锁产生的概率。

  3. 不同事务并发读写多张数据表,可以约定访问表的顺序,采用相同的顺序降低死锁发生的概率。

这篇关于数据库中锁的划分的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!