Mysql悲观锁、乐观锁、隔离级别、共享锁、排它锁知识整理_乐观锁 隔离级别-程序员宅基地

技术标签: Mysql  mysql  数据库  

一、为什么要有事务?

事务是保证一组数据库操作,要么成功,要么失败。

在mysql中,MyIsam引擎不支持事务,Innodb才支持事务。事务是引擎层实现的。

事务有ACID,原子性、一致性、隔离性、持久性。

二、innodb事务默认隔离级别是什么?

MySQL InnoDB存储引擎默认的事务隔离级别是可重复读

三、事务隔离级别有哪些?

事务隔离级别有:

读未提交:A事务未提交commit时,B事务可以查看到更新的结果。

读已提交:A事务提交后,B事务才可以查看到更新的结果。

可重复读:在commit未处理的情况下,A在A事务在开始时和commit前再去查的数据一致。

串行化:顾名思义,就是A未提交时,B事务必须要等待A执行完才能执行。

四、请简述一下乐观锁和悲观锁

乐观锁:

乐观的认为操作不会冲突,即不上锁,在更新的时候再处理冲突问题。是通过业务逻辑处理。

通常乐观锁是通过version版本号或时间戳处理。

如下面的示例:

id

title

version_id

1

标题1

0

2

标题2

0

事务处理:

事务A

事务B

// 获取id=1的数据

Select id, title, version_id From t1 Where id = 1

// 获取的数据为id=1,title=`标题1`,version_id=0

// 获取id=1的数据

Select id, title, version_id From t1 Where id = 1

// 获取的数据为id=1,title=`标题1`,version_id=0

// 更新数据title=`标题3`

Update t1 Set title="标题3",version_id = version_id + 1 Where id = 1 And version_id=0

// 更新数据title=`标题4`

Update t1 Set title="标题4" ,version_id = version_id + 1 Where id = 1 And version_id=0

如上面例子,只有事务A的Update能处理成功,事务B的Update操作会处理失败。所以就达到一个乐观锁的效果。乐观锁适合读多写少的场景。

悲观锁:

悲观的认为操作都会冲突,所以在每次操作的时候都需要先获取锁才能对数据进行修改。与乐观锁比较,悲观锁比较适合写多读少的场景,因为锁会导致其他的事务都等待。

悲观锁是数据库自己实现了。悲观锁又分为共享锁和排它锁。

五、请简述一下共享锁和排它锁

排他锁又称为写锁,共享锁又称为读锁。

以下简称S锁和X锁:

X锁又分为表锁、行锁,X锁如果没命中索引或者主键索引的话,就是表锁。

X锁当S锁来获取的时候,需要等待X锁解锁之后才能获取到。

S锁当S锁来获取的时候,可以重复的读取,X锁来获取的时候会失败。

通过sql语句 for update来实现。

Select id, title From t1 Where id = 1 For Update

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39873598/article/details/129087576

智能推荐

Pandas对行/列求和_pandas对具体列求和-程序员宅基地

文章浏览阅读5.3k次,点赞3次,收藏18次。Pandas对行/列求和_pandas对具体列求和

Visio--用例图、类图、顺序图、活动图_visio画用例图-程序员宅基地

文章浏览阅读1.9w次,点赞32次,收藏228次。做个小结。_visio画用例图

程序员的路----程序员一定要仔细看_程序员的道路-程序员宅基地

文章浏览阅读2.2k次。在网上看到的恶搞程序员的图片,实在是搞笑。看一次笑一次!程序猿的十年他不是乞丐,请尊称他为程序猿。对,他就是程序猿!其实,你们看到的不是僵尸,他们都是苦逼的程序猿!这不是恶搞的,是一个真实的故事!看他的拐杖,其实也挺可怜的!不知是不是敲代码敲多了,把脚敲颓了!_程序员的道路

从Atlas到Microsoft ASP.NET AJAX(6) - Networking, Application Services-程序员宅基地

文章浏览阅读42次。NetworkingCalling Web Service Methods from Script  为了简化Web Services方法调用,客户端代理的设计被改变了,它在方法调用和回调函数设置方面提供了强大的灵活性。  下面的例子展示了CTP版本中Web Services方法的客户端调用,以及回调函数的使用方式。第一个例子展示了在CTP版本中Web ..._.net6 applicationservices

一文带你了解socket网络编程以及详解过程和原理_socket编程-程序员宅基地

文章浏览阅读1.1w次,点赞42次,收藏178次。Socket(套接字)是计算机网络编程中的一种抽象概念,它提供了在网络上进行通信的接口。通过使用 Socket,可以在不同计算机之间建立连接,并进行数据的传输和交换。通过 Socket,客户端可以与服务器建立连接并发送请求,服务器接收请求并返回响应。通过 Socket,可以在多个用户之间实现实时的文字、音频或视频通信。可以使用 Socket 在不同计算机之间传输文件,如上传和下载文件。可通过 Socket 在远程计算机上执行指令或操作。_socket编程

nodejs第三方模块 express框架 传参_nodejs express 模块间参数传递-程序员宅基地

文章浏览阅读413次。nodejs第三方模块 express框架 传参get接口动态参数以这个举例 http://localhost:8001/edit/124其中,/124传递的id值124就是动态参数服务器通过req.params获取app.get("/edit/:id",(req,res)=>{ console.log(req.params) res.send("发送成功")})这个在我们删除和编辑数据的时候最常用,根据指定的id删除内容,以及编辑内容时的数据回显。查询字符串参数_nodejs express 模块间参数传递

随便推点

计算机考研408每日一题 day78_命中率高且电路实现简单的cache内存映射方式-程序员宅基地

文章浏览阅读392次。对于二叉排序树,下面的说法 ___是正确的。(华南理工大学 2006年)设备驱动程序在读写磁盘数据时一般釆用下列哪种I/O方式?(中国科学院大学 2018)下列___交换技术是独占信道工作方式。(中南大学 2006年)命中率高且电路实现简单的Cache 与内存映射方式是___映射方式。(中国科学院大学 2015)_命中率高且电路实现简单的cache内存映射方式

Unhandled exceptions: java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException_unhandled exceptions: java.lang.instantiationexcep-程序员宅基地

文章浏览阅读3.2k次。可能是没有异常处理,只需要加上throws Exception就解决问题了。_unhandled exceptions: java.lang.instantiationexception, java.lang.illegalacc

webview ERROR_UNSUPPORTED_SCHEME ,errorcode=-10问题处理-程序员宅基地

文章浏览阅读1.5k次。webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { try{ if(url.startsWith("baidumap://")){ Intent _error_unsupported_scheme

embed标签-程序员宅基地

文章浏览阅读66次。Embed  (一)、基本语法:  embed src=url  说明:embed可以用来插入各种多媒体,格式可以是 Midi、Wav、AIFF、AU、MP3等等, Netscape及新版的IE 都支持。url为音频或视频文件及其路径,可以是相对路径或绝对路径。  示例:<embed src="your.mid">  (二)、属性设置:  1、自动播放...

php 上传文件漏洞,PHP -- 文件包含、文件上传漏洞-程序员宅基地

文章浏览阅读330次。PHP -- 文件包含、文件上传漏洞PHP -- 文件包含、文件上传漏洞文件包含文件引入漏洞,是由一个动态页面编译时引入另一个文件的操作。文件引入本身是没有问题,它是用于统一页面风格,减少代码冗余的一种技术。但是在特定的场景下就会形成漏洞jsp:include指令和include动作,其中include动作用于引入动态文件php:include(),include_once(),require()..._php文件上传4漏洞

配置NGINX同时运行 https 和 http_nginx 和 http无法同时启动-程序员宅基地

文章浏览阅读406次。SSL 是需要申请证书的,key和PEM文件要放到服务器路径。然后NGINX下要进行443端口和80端口的绑定。server { listen 80; server_name ietaiji.com www.ietaiji.com; root "D:/aaa/WWW/ietaiji"; index index.html_nginx 和 http无法同时启动