【MySQL学习笔记009】事务

一、事务简介

        事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

二、事务操作

1、操作1

        查看/设置事务提交方式

                select @@autocommit; 输出为1 --自动提交,0--手动提交

                set @@autocommit=0;

        提交事务

                commit;

        回滚事务

                rollback;

2、操作2

        开启事务

                start transaction 或 begin;

        提交事务

                commit;

        回滚事务

                rollback;

三、事务四大特性

        原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败;

        一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。

        隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

        持久性(Durability):事务一旦提交或回滚,它对数据库中的数据改变就是永久的。

四、并发事务问题

五、事务隔离等级

        -- 查看事务隔离级别

                select @@transaction_isolation;

        -- 设置事务隔离级别

                set [session | global ] transaction isolation level [ read uncommitted | read committed | repeatavle read | serializable ]

        注意:事务的隔离级别越高,性能越低。

六、案例

        打开两个命令符窗口

        登录数据库 mysql -u root -p,切换到练习数据库use pra;

        开启事务 start transaction

        先查询一下表中数据 select * from account;

        在第一个命令符窗口中设置事务隔离级别为read uncommitted——>set session transaction isolation level read uncommitted;

        然后在第二个命令符窗口中输入命令:update account set money = money - 1000 where name = '张三'; 因为目前是开启的事务模式,所以不提交数据库是不会进行相关操作;但是在第一个命令符窗口中执行:select * from account; 会发现account表中的数据已经被修改,这就是脏读现象。

        若在第一个命令符窗口中执行set session transaction isolation level read committed;即设置事务隔离级别为read committed,重复以上操作,则不会出现脏读现象。

        设置read committed,解决脏读问题后,但是不能解决不可重复读现象。开启事务 start transaction(两个窗口),第一个窗口执行 select * from account; 然后第二窗口执行 update account set money = money + 1000 where name = '张三';,但是不执行提交,然后在第一个窗口再次执行 select * from account;发现两次查询结果一样,然后第二个窗口执行提交,第一个窗口执行查询,结果发现变化,这就是不可重复读。

        将事务隔离级别设置为repeatable read,重复上述操作,可实现重复读取。

        然而,repeatable read 隔离级别,无法解决幻读现象,开启事务 start transaction(两个窗口),第一个窗口执行select * from account where id = 3;返回空值,然后在第二个窗口执行 insert into account (id, name, money) values (3, '王五', 2000);,提交。再用第一个窗口查询,同样返回空值,然后再用第一个窗口执行插入命令 insert into account (id, name, money) values (3, '大刀王五', 2000); 返回error报错account中主键3重复,那么再次查询主键为3的数据,返回依然没有值。这种现象就是幻读。

        幻读现象可以使用serializable(串行化)隔离级别解决。

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

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

相关文章

python的pypi安装_python pip及安装包安装

python 微信聊天D:\untitled\hello.py 入口 web禁止登陆。。安装命令:手动安装:D:\python\setuptools-41.2.0>python setup.py install下载下来手动安装pipD:\python\pip-1.4.1\pip-1.4.1>python setup.py installD:\python\setuptools-41.2.0>…

python 爬取生意参谋数据_如何爬取生意参谋数据?是不是违规操作?

1、在淘宝选项卡中,打开【生意参谋】工具。2、在【生意参谋数据拷贝】中,点击【打开生意参谋】按钮。3、在调用的IE浏览器中输入账号和密码。4、登陆好后,找到竞品,并点击【查看详情】。5、进入到竞品详情后,注意修改日…

c mysql 视图_MySQL入门教程(七)之视图

相关阅读:视图是从一个或多个表中导出来的虚拟表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。1、视图简介1.1 视图的含义视图是从一个或多个表中导出来的虚拟表,还可以从已经存在的视图的基础上定义。数据库中只存放视图的定…

tensorflow gpu安装_tensorflow-gpu安装配置

1 介绍目前,主流版本是tensorflow-gpu 1.12.0,线上安装这个版本,和这个版本搭配的cuda是9.0版本,cudnn版本是7.0.5。2 cuda和cudnn安装cuda驱动地址:cuda_9.0.176_384.81_linux.runcudnn库地址: cudnn-9.0-linux-x64-v…

hibernate mysql autocommit_Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?...

求大神讲解下Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?public class Main {public static void main(String[] args) {SessionFactory sessionFactory new Configuration().configure().buildSessionFactory();Student student new Stud…

java ee文件下载_JavaEE实现文件下载

我们先来看一个最简单的文件下载的例子:package com.yyz.response;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.…

python输出jpg_利用python实现.dcm格式图像转为.jpg格式

如下所示:import pydicomimport matplotlib.pyplot as pltimport scipy.miscimport pandas as pdimport numpy as npimport osdef Dcm2jpg(file_path):#获取所有图片名称c []names os.listdir(file_path) #路径#将文件夹中的文件名称与后边的 .dcm分开for name in…

java联合主键_hibernate联合主键映射(注解版)

1、联合主键的映射三种写法实体类:package com.zhouwei.po;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.IdClass;import javax.persistence.Table;//联合主键(通过id和name确定一个人)EntityTable(name"t_person&q…

python 如何边改代码边调试_Python 代码调试神器:PySnooper

给大家推荐本我自己写的电子书《PyCharm中文指南》,把各种 PyCharm 的高效的使用技巧用GIF动态图的形式展示出来。有兴趣的可以看它的在线文档:http://pycharm.iswbm.com对于每个程序开发者来说,调试几乎是必备技能。代码写到一半卡住了&…

python 代理服务器_Python实现HTTP代理服务器

这些天闲来无事就研究了下HTTP代理原理,顺便用Python做了个很挫的程序。import socketimport threadingclass ProxyServer():def __init__(self):self.ListenSock socket()self.ListenSock.bind()self.Clients []def listen_thread(self):self.ListenSock.listen(…

java 如何导出json文件_java导出json格式文件的示例代码

本文介绍了java导出json格式文件的示例代码,分享给大家,具体如下:import java.io.File;import java.io.FileWriter;import java.io.Writer;public class CreateFileUtil {/*** 生成.json格式文件*/public static boolean createJsonFile(Stri…

python执行shell命令、并获取执行过程信息_python执行使用shell命令方法

1. os.system(shell_command)直接在终端输出执行结果,返回执行状态0,1此函数会启动子进程,在子进程中执行command,并返回command命令执行完毕后的退出状态,如果command有执行内容,会在标准输出显示。这实际上是使用C标…

java安全框架有哪些_Java开发必备教程-细说Spring Security安全框架

一、Spring Security介绍spring security 是基于 spring 的安全框架。它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权。在 Spring Framework 基础上,spring security 充分利用了依赖注入(DI)和面向切面编程(AOP)功能&…

无法读取源文件或磁盘_raid磁盘阵列作用

磁盘阵列的作用:1.提高传输速率。RAID通过在多个磁盘上同时存储和读取数据来大幅提高存储系统的数据吞吐量(Throughput)。在RAID中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可…

java none怎么用tomcat_JavaWeb学习——在Eclipse里使用Tomcat

JavaWeb学习——在Eclipse里使用Tomcat摘要:本文主要学习了如何在Eclipse里使用Tomcat服务器。添加Tomcat打开Eclipse的配置页面,点击菜单上的“Window”,在下拉菜单中找到“Preferences”:找到运行环境的配置页面,如果…

mysql b 树原因_复习系列之数据库(四):MySQL为什么采用B+树作为索引结构?

MySQL中数据是索引组织表,即表中数据按照主键顺序存放。所以就可以基于索引这种数据结构实现一些高级算法,来提高检索效率。常见的查找算法顺序查找:复杂度O(n),在数据量大时,效率很低二分查找:在有序为前提…

关于python类_python中类的总结

1、 类中的方法在类里主要有三种方法:a、普通方法:在普通方法定义的时候,需要一个对象的实例参数,从而在类中定义普通方法的时候,都必须传送一个参数self,那么这个参数也就是objectb、类方法:在…

折线图 java_java报表折线图

package com.potevio.rnd.tobacco.mine;import java.util.Map;/*** description 数据BEAN* author Zhou-Jingxian*/public class Bean {private String goods_name ;private Map priceindexMap;public String getGoods_name() {return goods_name;}public void setGoods_name(S…

windows无法检索有关这台计算机上的磁盘信息_磁盘镜像软件OO DiskImage Pro 15.5介绍及安装教程...

Active Disk Image是一种磁盘映像软件,可以精确复制任何PC磁盘(HDD,SSD,USB,CD,DVD,Blu-ray等)并将其存储在文件夹中。磁盘映像可用于备份,PC升级或磁盘复制。万一计算机出现故障,可…

java中的抽象方法_Java中的抽象类和抽象方法

###Java中的抽象方法和抽象类:abstract:关键字,可以用于修饰方法和类抽象方法:不同类的方法是相似的,但是具体实现的内容又不太一样,没有具体的方法体。抽象类:有抽象方法的类必须是抽象类类与抽象类的关系…