博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL - 行锁 表锁 乐观锁 悲观锁 读锁 写锁
阅读量:5891 次
发布时间:2019-06-19

本文共 646 字,大约阅读时间需要 2 分钟。

锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足。在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。

行锁

锁定整个行数据,开销大,加锁慢,会出现死锁。锁定粒度小,发生锁冲突的概率低,并发度高。

表锁

锁定整个表数据,开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突概率高,并发度低。

悲观锁

每次取数据时都认为别人会修改,所以每次取数据的时候都会上锁,这样别人想拿这个数据就会被阻塞,直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。适用于“写多读少”的场景。

乐观锁

每次取数据时都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。适用于“读多写少”的场景,这样可以提高吞吐量。数据库中的write_condition机制就是乐观锁。

共享锁

共享锁指的是对于多个不同的事务,对同一个资源共享同一个锁。相当于对于同一把门,它拥有多个钥匙一样。共享锁也属于悲观锁的一种,通过在执行语句后面加上lock in share mode就加上共享锁了。

 

posted on
2019-06-14 13:50 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/helios-fz/p/11022911.html

你可能感兴趣的文章
The 6th tip of DB Query Analyzer
查看>>
boost xpressive 例子
查看>>
C++容器和算法
查看>>
leetcode -- Convert Sorted Array to Binary Search Tree
查看>>
ADO.NET访问Access(文本数据库)数据操作(CRUD)
查看>>
razor 语法
查看>>
贝佳斯绿泥_百度百科
查看>>
安卓模拟器
查看>>
JSP/Servlet的编码原理
查看>>
java命令行HPROF Profiler
查看>>
css 禅意花园 笔记
查看>>
网站架构设计的误区
查看>>
Standard C++ Programming: Virtual Functions and Inlining
查看>>
html5 Web Workers
查看>>
iis 故障导致网站无法访问
查看>>
作业抄袭简单检测
查看>>
ASP.NET 回调技术(CallBack)
查看>>
Spark源码分析 – BlockManager
查看>>
JS中的this
查看>>
[20140117]疑似checkpoint堵塞数据库连接
查看>>