事务是保证一组数据库操作,要么成功,要么失败。
在mysql中,MyIsam引擎不支持事务,Innodb才支持事务。事务是引擎层实现的。
事务有ACID,原子性、一致性、隔离性、持久性。
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
文章浏览阅读5.3k次,点赞3次,收藏18次。Pandas对行/列求和_pandas对具体列求和
文章浏览阅读1.9w次,点赞32次,收藏228次。做个小结。_visio画用例图
文章浏览阅读2.2k次。在网上看到的恶搞程序员的图片,实在是搞笑。看一次笑一次!程序猿的十年他不是乞丐,请尊称他为程序猿。对,他就是程序猿!其实,你们看到的不是僵尸,他们都是苦逼的程序猿!这不是恶搞的,是一个真实的故事!看他的拐杖,其实也挺可怜的!不知是不是敲代码敲多了,把脚敲颓了!_程序员的道路
文章浏览阅读42次。NetworkingCalling Web Service Methods from Script 为了简化Web Services方法调用,客户端代理的设计被改变了,它在方法调用和回调函数设置方面提供了强大的灵活性。 下面的例子展示了CTP版本中Web Services方法的客户端调用,以及回调函数的使用方式。第一个例子展示了在CTP版本中Web ..._.net6 applicationservices
文章浏览阅读1.1w次,点赞42次,收藏178次。Socket(套接字)是计算机网络编程中的一种抽象概念,它提供了在网络上进行通信的接口。通过使用 Socket,可以在不同计算机之间建立连接,并进行数据的传输和交换。通过 Socket,客户端可以与服务器建立连接并发送请求,服务器接收请求并返回响应。通过 Socket,可以在多个用户之间实现实时的文字、音频或视频通信。可以使用 Socket 在不同计算机之间传输文件,如上传和下载文件。可通过 Socket 在远程计算机上执行指令或操作。_socket编程
文章浏览阅读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 模块间参数传递
文章浏览阅读392次。对于二叉排序树,下面的说法 ___是正确的。(华南理工大学 2006年)设备驱动程序在读写磁盘数据时一般釆用下列哪种I/O方式?(中国科学院大学 2018)下列___交换技术是独占信道工作方式。(中南大学 2006年)命中率高且电路实现简单的Cache 与内存映射方式是___映射方式。(中国科学院大学 2015)_命中率高且电路实现简单的cache内存映射方式
文章浏览阅读3.2k次。可能是没有异常处理,只需要加上throws Exception就解决问题了。_unhandled exceptions: java.lang.instantiationexception, java.lang.illegalacc
文章浏览阅读1.5k次。webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { try{ if(url.startsWith("baidumap://")){ Intent _error_unsupported_scheme
文章浏览阅读66次。Embed (一)、基本语法: embed src=url 说明:embed可以用来插入各种多媒体,格式可以是 Midi、Wav、AIFF、AU、MP3等等, Netscape及新版的IE 都支持。url为音频或视频文件及其路径,可以是相对路径或绝对路径。 示例:<embed src="your.mid"> (二)、属性设置: 1、自动播放...
文章浏览阅读330次。PHP -- 文件包含、文件上传漏洞PHP -- 文件包含、文件上传漏洞文件包含文件引入漏洞,是由一个动态页面编译时引入另一个文件的操作。文件引入本身是没有问题,它是用于统一页面风格,减少代码冗余的一种技术。但是在特定的场景下就会形成漏洞jsp:include指令和include动作,其中include动作用于引入动态文件php:include(),include_once(),require()..._php文件上传4漏洞
文章浏览阅读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无法同时启动