mysql事务中怎么更改空值_MySQL事务

1.事务

1.事务特性--ACID

Atomicity(原子性):要么全做,要么不做,不能只做一半(银行转账)

Consistency(约束性):事务的前后,约束都能满足

Isolation(依赖性):事务之间是独立的,互不影响的

Durability(持久性):事务执行之后,事物的结果可以持久保存

2.事务隔离级别:

read uncommitted:可以读到未提交的事务结果

read committed:只能读已提交事务的结果

repeatable reads:可以读到开启事务时的值

serializable:两个事务同时发生,必定是有先后的

3.实践操作的准备

使用Join and Group中两个表,向product表中新添一个字段count,用来记录产品数量

09d1e1b5553353fbe60b004b6a53e4a2.png

2.Read Commit

预热:查询一下当前数据库的事务隔离级别,保证事务隔离级别是read-commited

我的数据库是Mysql5.5,默认事务隔离级别是repeatable-read,所以将其修改为read-commited

965f0ee38826dd621180b6fb66abc45b.png

1c546be803bb8e47629d5cde12c953dc.png

1.首先开启两个事务--事务A,事务B(注意这里如果使用可视化界面,例如Heidi,可能两个窗口并不是真正的开启了两个事务,所以建议使用cmd来测试)

开启事务A -> 将自动提交设为否(似乎5.5以上版本事务隔离级别高,不自动提交) -> 查询productId=4的count

事务A:

fdd1ae490cba79fc24bae84af2bf94a3.png

开启事务B,执行与事务A同样的操作

事务B:

15b8164dc86e781c694907ead6fcf4a6.png

2.在事务B中操作,将productId=4的count更改为49,但是不提交事务

事务B:

60c61bd3513bd880e2752f3e5f6241a5.png

3.此时在事务A中查询一下count值,看在事务B更改数据但是未提交的情况下,事务A是否能查看到更新后的数据

事务A:

2fa94ff297468935cdaccb6de3fc7403.png

结果:事务A不能查看到事务B未提交的数据

4.将事务B提交,操作事务A,看是否能查询到更新后的数据

事务A:

4e5482f71c5a3e91b99a3af5681505ee.png

结果:事务B提交后,事务A能查询到更新后的数据了

结论:当事务隔离级别为read-commited时,一个事务只能读取到另一事务已提交的数据

3.Repeatable-read

预热:查询并将事务隔离级别修改为repeatable-read,将数据库中count字段初始化为50

51cf377d476cafd3253c9efe6faa7afe.png

1.分别在开启事务A,事务B

事务A:

e312b3694f484212e1794d534ebe9b11.png

事务B:

e312b3694f484212e1794d534ebe9b11.png

2.在事务B端更改count值,但是不提交事务

事务B:

f6550c067cc9605988b6dd7b082c3b39.png

操作事务A查询count,发现查询结果没变

事务A:

950219df0f60e0b284bb026941c23c87.png

3.提交事务B,并且操作事务A查看count,发现查询到的count值依然没变

事务B:

4a34c67ce34104f6845affdd089f7f02.png

事务A:

5a32e85b6434cd0b24402a155d155fbb.png

结论:当事务隔离级别为repeatable-read时,一个事务只能读到开启本事务时读到的数据,无法读取其他事务更新的数据

4.Serializable

预热:查询并将事务隔离级别更改为serializable,将product表中count更改为50

147c3b987cf32ff3b7c2c60cee3db4f7.png

1.分别开启事务A,事务B

750c74f4c07d9a5181183d6f16cb6a77.png

2.在事务B端执行更新操作

事务B:发现没有一直处于执行中,并没有执行成功

7909470efe461e68997692b0d11bc1b2.png

2.将事务A提交后,发现事务B更新成功

事务A:

558c1afb5db61475159840d9596d3034.png

事务B:

cc5ec0425443b079156de8a54a49c6e7.png

3.再提交事务B,操作事务A

事务B:

849a081b56867a1c3f3e2b0b720691e9.png

事务A:

2ba49eba1d8268b6a3764e39755f1bb3.png

结论:在serilizalbe级别下,select语句不仅会开启事务,还会降数据锁上,只允许其他事务查询,不允许更改

5.For update

事务隔离级别没必要提升到serilizable,只需要使用read-committed,select语句加for update即可

预热:将事务隔离级别更改为read-committed

671380a5d7a1deae88042e720ca71cff.png

1.开启事务A,并将查询语句中加入for update

事务A:

ccdf6c0148f065274058deae6ba8de22.png

事务B:

6ca857d0d0d771bfad74d8dd80105890.png

结果:只有当事务A提交之后,事务B才能查询到数据

结论:在select语句中加入for update时,只有当次事务提交之后,其他事务才能查询数据,for update会将数据加锁,防止其他事务操作发生数据不一致

6.乐观锁

在语句中加入版本控制,如果版本是当前版本则可以进行修改,否则进行回滚,还有加锁可是很浪费时间的哦

转发一篇文章悲观锁和乐观锁;,自己很喜欢的公众号---码农翻身

7.例题

3ac7492235b96ddc3ab61c4e69646d0b.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348065.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql自定义函数多参数_自定义mysql函数 - 无法传递参数

作为标题状态。这里的功能DELIMITER //CREATE FUNCTION GetCreateValue( table_name CHAR(64), id_field CHAR(64), name_field CHAR(64), name_value CHAR(64) )RETURNS INTEGERBEGINDECLARE ret INTEGER;SELECT count(*) INTO ret FROM table_name WHERE name_field name_va…

与Zapier集成

整合很无聊。 也是不可避免的。 但是我不会写有关企业集成模式的文章 。 相反,我将解释如何创建与Zapier集成的应用程序。 什么是Zapier ? 它是一项服务,使您可以通过其API(或协议)连接两个(或多个&#x…

python用psf函数_python学习之-类的内置函数

内置方法:__str__(该方法必须返回字符串类型),在对像被打印时自动触发,然后将该方法的返回值当做打印结果输出)class People:def __init__(self,name,age):self.namenameself.ageagedef __str__(self): #绑定给对象的方法return ‘‘ %(self.name,self.age) #这个方…

多用户远程连接mysql_Mysql权限控制 - 允许用户远程连接

Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作:一、允许root用户在任何地方进行远程登录,并具有所有库任何操作…

cxf 服务端soap报文_使用Apache CXF开发SOAP Web服务

cxf 服务端soap报文在上一篇文章中,我逐步介绍了使用apache CXF开发简单的RESTFull服务的步骤。 在本文中,我将讨论使用CXF开发SOAP Web服务。 在继续前进之前,让我们先了解一下构成SOAP Web服务的概念/元素 SOAP或简单对象访问协议 SOAP是一…

Java 8日期和时间

如今,一些应用程序仍在使用java.util.Date和java.util.Calendar API,包括使我们的生活更轻松地使用这些类型的库,例如JodaTime。 但是,Java 8引入了新的API来处理日期和时间,这使我们可以对日期和时间表示进行更精细的…

php mysql 随机字符串_MySQL_Mysql 自定义随机字符串的实现方法,前几天在开发一个系统,需要 - phpStudy...

Mysql 自定义随机字符串的实现方法前几天在开发一个系统,需要用到随机字符串,但是mysql的库函数有没有直接提供,就简单的利用现有的函数东拼西凑出随机字符串来.下面简单的说下实现当时.1.简单粗暴.select ..., substring(MD5(RAND()),floor(…

python哪些类型可以作为迭代器_python0.8-----set类型与迭代器

set:类似dict,是一组dict的集合,不存储value。本质:无序(没有下标)无重复的元素的集合。创建:创建set需要一个list或者tuple或者dict作为输入集合。重复元素在色中会被自动过滤。s1[1,2,3,4,5,6,1,2]set(s1){1,2,3,4,5,6} --表示》…

线程池实现填充短信_填充一个池需要多少个线程?

线程池实现填充短信在最近几个月中,我们一直看到很小但持续的操作失败,但有一个奇怪的异常– org.springframework.jdbc.CannotGetJdbcConnectionException –“无法获得JDBC连接; 嵌套异常是java.sql.SQLException:客户端尝试检出…

python线性回归x可以数量不一样吗_R和Python中的线性回归 - 在同一问题上的结果不同...

只是指出这一点: statsmodel s least squares fit does by default not include a constant. If we remove the constant from R适合,我们得到与Python实现非常相似的结果,或者相反,如果我们向 statsmodel -fit添加一个常量&#…

PostgreSQL开放自由

Open Liberty是源自WebSphere Liberty的有趣的新型OSS Java EE应用服务器。 您可以将Open Liberty配置为使用PostgreSQL作为其默认数据源&#xff0c;如下所示&#xff1a; 将<datasource> &#xff0c; <jdbcDriver>和<library>指令添加到server.xml配置中…

实现mysql百度式查询_mysql查询优化建议(百度)

1.对查询进行优化&#xff0c;应尽量避免全表扫描&#xff0c;首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中使用!或<>操作符&#xff0c;否则将引擎放弃使用索引而进行全表扫描。3.应尽量避免在 where 子句中对字段进行 null 值判断…

海思芯片怎么使用tde给qt加速_3519移植Qt适配附件

【实例简介】修改Qt5.5.1linuxfb插件代码&#xff0c;适配海思3519平台【实例截图】【核心代码】3519Qt移植.tar├── 3519Qt绉绘│ ├── linuxfb│ │ ├── include│ │ │ ├── acodec.h│ │ │ ├── fisheye_calibrate.h│ │ │ ├─…

jsf标签_多个动态包含一个JSF标签

jsf标签每个JSF开发人员都知道ui&#xff1a;include和ui&#xff1a;param标签。 您可以包括一个facelet&#xff08;XHTML文件&#xff09;并传递一个对象&#xff0c;该对象将在包含的facelet中可用&#xff0c;如下所示&#xff1a; <ui:include src"/sections/co…

用Java比较文件

我正在为PACKT创建一系列有关Java网络编程的视频教程。 有整节关于Java NIO。 一个示例程序是通过原始套接字连接将文件从客户端复制到服务器。 客户端从磁盘读取文件&#xff0c;服务器将到达的字节保存到磁盘。 因为这是一个演示&#xff0c;所以服务器和客户端在同一台计算机…

java哈希_Java如何采用哈希码实现分类(以员工分配为例)

5.总程序&#xff1a;下面代码是我们获取的所有的程序代码&#xff0c;如下&#xff1a;public static void main(String[] args) {Scanner scannew Scanner(System.in);System.out.println("请输入员工姓名&#xff1a;");String namescan.nextLine();System.out.pr…

java反射的原理_java反射机制的实现原理

java反射机制的实现原理反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力。通过这种能力可以彻底的了解自身的情况为下一步的动作做准备。下面具体介绍一下java的反射机制。这里你将颠覆原来对java的理解。Java的反射机制的实现要借助于4个类&#xff1a;class&…

java linkedlist 用法_Java LinkedList addLast()用法及代码示例

Java中的java.util.LinkedList.addLast()方法用于在LinkedList的末尾插入特定元素。用法:void addLast(Object element)参数&#xff1a;此函数接受单个参数element &#xff0c;如上面的语法所示。此参数指定的元素将附加在列表的末尾。返回值&#xff1a;此方法不返回任何值。…

spring 长轮询_Spring集成文件轮询和测试

spring 长轮询我最近实施了一个小项目&#xff0c;在该项目中&#xff0c;我们必须轮询文件夹中的新文件&#xff0c;然后在文件内容上触发服务流。 Spring Integration非常适合此要求&#xff0c;因为它带有一个通道适配器 &#xff0c;该适配器可以扫描文件夹中的新文件&…

java扫描指定package注解_java获取包下被指定注解的类

方案一&#xff1a; 采用reflections 框架(此框架依赖com.google.guava)2、项目依赖org.reflectionsreflections0.9.11com.google.guavaguava21.03、实现代码//入参 要扫描的包名Reflections f new Reflections("com.ggband.netty.execute.command");//入参 目标注解…