MYSQL–>事务

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

开启事务—->提交事务

如果中间出现了异常,就回滚事务

回滚事务指的是将修改的数据恢复

注意:MYSQL中默认事务自动提交,即执行DML语句的时候MYSQL会立即隐式的提交事务.

以转账为例

假定有这样一个账单

账户 余额 张三 2000 李四 2000

现进行以下操作

对这三条指令在同一时间执行那么表会变成

账户 余额 张三 1000 李四 3000

假定2–3中存在SQL语句A,且A中SQL语句必然不能执行成功

这张表就会变成

账户 余额 张三 1000 李四 2000

那么将1,2,A,3的代码在同一时间执行,就会出现1,2执行成功A,3执行不超过

这时候我们回滚事务回复即可。

在MYSQL中每一条DML语句都是一个单独的事务,并且默认自动提交。

事务的执行语法

查看事务提交方式

Select @@autocommit;

如果是1代表手动提交,0代码自动提交。在MYSQL中@@代表系统变量,@代表用户自定义变量。

设置事务的提交方式

Set @@autocommit=0或者1;(这个是将整个控制台提交方式的修改)
begin;  开启事务
Start transcation; 开启事务

提交事务

commit;

回滚事务

rollback;

一般事务用法:

begin或start transcation
SQL语句
commit;

出现错误
回滚事务
roolback;

原子型(Atomicity)

事务是不可分割的最小操作单位,要么全部成功要么全部失败

一致性(Consistency)

事务完成时,必须使所有数据保持一致的状态

隔离性(Isolation)

数据库提供的 隔离机制,保证事务不受外部并发操作的影响的独立环境运行

持久性(Durability)

事务一旦提交或回滚,他对数据库中的数据影响是永久的

A事务和B事务同时操作同一张表引发的问题叫并发事务问题

就多个操作端,同时操作一张表产生的问题。

事务A读取到了事务B未提交的数据

代码过程

事务A的客户端(数字代表执行顺序)

1. begin;  ->客户端A开启事务
3. select * from account where id=1;   ->事务A查询id=1的内容
5. select * from account where id=1;   ->事务A再次查询id=1的内容
6.读取到了客户端B未提交的数据

事务B的客户端

2. begin;  ->客户端B开启事务
4. update account set mone=money-1000 where id=1;  ->事务B更新id=1的数据

A事务读取到了B事务 未提交的数据就叫 脏读

不可重复读

在一个事务中,查询俩次前后查询数据不一致的叫 不可重复读

代码过程

事务A的客户端(数字代表执行顺序)

1. begin;       ->客户端A开启事务
3. select * from account where id=1;  ->客户端A第一次查询id=1的记录
6. select * from account where id=1;  ->客户端A第二次查询id=1的记录
7. 前后查询不一致!

事务B的客户端

2. begin;       ->客户端B开启事务
4. update account set money=money+1000 where id=1; ->客户端B更新id=1的记录
5. commit;  ->客户端B提交数据

事务A按条件查询一个记录的时候该记录不存在

但是按照这个条件插入数据的时候会返回已经存在该数据。这种叫幻读

代码过程

客户端A(数字代表执行顺序)

1. begin;   ->客户端A开启事务
3. select * from account where id=3; ->假定不存在id=3的数据,事务A第一次查询id=3的数据
6. insert into account(id,name,money) values(3,'王五',3000); ->事务A插入id=3的数据,结果反馈说已经存在id=3的数据
7. select * from account where id=3; ->事务A继续查询id=3的数据,反馈不存在id=3的数据

客户端B

2. begin;  ->客户端B开启事务
4. insert into account(id,name,money) values(3,'王五',3000); ->事务B插入id=3的数据
5. commit;  ->事务B提交数据
  • √代表会出现
  • ×代表不会出现

隔离级别 脏读 不可重复读 幻读 Read uncommitted √ √ √ Read committed × √ √ Repeatable Read(默认) × × √ Serializable × × ×

从read uncommitted—>serializable 隔离级别依次提高,性能依次下降。

查询当前事务的隔离级别

select @@transaction_isolation;

设置事务的隔离级别

set [session/global] transaction isolation level [级别];

session代表对当前窗口有效,global代表对全部窗口有效

Original: https://www.cnblogs.com/wdadwa/p/MYSQL_Learning_05.html
Author: wdadwa
Title: MYSQL–>事务

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611876/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • InnoDB 中不同SQL语句设置的锁

    锁定读、UPDATE 或 DELETE 通常会给在SQL语句处理过程扫描到的每个索引记录上设置记录锁。语句中是否存在排除该行的WHERE条件并不重要。InnoDB不记得确切的WHE…

    数据库 2023年6月14日
    0135
  • Collection

    ArrayList底层使用了数组存储 LinkedList底层使用双向链表 HashSet底层是一个HashMap支持,HashMap底层物理实现一个Hash表 LinkedHas…

    数据库 2023年6月14日
    0115
  • 数据库设计案例

    简单构建设计数据库 数据库设计案例 描述:简单构建设计数据库 sql代码实现 /* 数据库设计案例 */ — 音乐表 CREATE TABLE Music ( title VAR…

    数据库 2023年6月16日
    0135
  • Javaweb10-javaweb其他知识点

    1、详解DefaultServlet与JspServlet 当服务端收到关于 Servlet的请求之后交由 自定义Servlet处理。 当服务端收到关于 静态资源的请求时交由 De…

    数据库 2023年6月16日
    0111
  • css height属性中的calc方法

    例如父盒子是100%的高度 盒子里面的head部分固定位140px 内容部分始终为剩余的全部高度 height: calc(100% – 140px); “…

    数据库 2023年6月16日
    0164
  • Redis-内存淘汰策略

    策略分类 内存写满了怎么办?Redis提供了以下几种内存淘汰的策略: No eviction 不淘汰数据 即,内存写满后,再有写请求时,Redis直接返回错误,不会提供服务。这也是…

    数据库 2023年6月11日
    0121
  • 5、Idea同时选择多处光标进行编辑

    1、按住Alt+Shift,然后用鼠标左键点击文本,可以让光标在多个位置出现2、每个光标都会同时输入你正在输入的文本3、ESC退出 搜索 复制 Original: https://…

    数据库 2023年6月6日
    0118
  • Host-Only模式下虚拟机无法联网问题

    环境: 镜像:Linux CentOS7——————————…

    数据库 2023年6月11日
    0110
  • 绘制几何图形

    《零基础学Java》 绘制几何图形Java可以 分别使用 Graphics 和 Graphics2D 绘制图形, Graphics类 使用不同的方法绘制不同的图形(drawLine…

    数据库 2023年6月16日
    0125
  • Mysql之Binlog

    1、简述 binlog 二进制日志文件,这个文件记录了MySQL所有的DML操作。通过binlog日志我们可以做数据恢复,增量备份,主主复制和主从复制等等。 2、Docker中无法…

    数据库 2023年6月16日
    0110
  • 阿里巴巴编码规范-考试认证

    阿里巴巴编码规范-考试认证 雨打梨花深闭门,忘了青春,误了青春。 1、注册阿里云账号 2、购买认证 需要怒支付一顿早餐Q,可以用支付宝支付,选择支付宝支付然后直接输入支付密码就OK…

    数据库 2023年6月14日
    0191
  • Binlog分析利器-binlog_summary.py

    ​Binlog中,除了具体的SQL,其实,还包含了很多有价值的信息,如, 拿到上面这些信息,我们可以做哪些事情呢? 开发了一个简单的Binlog分析工具-binlog_summar…

    数据库 2023年6月11日
    0132
  • Go LRU Cache

    目录 LRU Cache container/list.go 2.1 list 数据结构 2.2 list 使用例子 transport.go connLRU 结尾 正文 1. L…

    数据库 2023年6月9日
    0118
  • VM Ware 给Centos虚拟机配置静态IP

    前言:在大家的日常运维工作中,肯定多多少少都会用到虚拟机,但是默认情况下VMware创建的虚拟机每次启动都有可能更换IP这就对我们的工作造成了一定的麻烦,下面我就给大家介绍下,如何…

    数据库 2023年6月9日
    0113
  • asp.net(C#)接MYSQL8.0版本报错的处理方法

    由于新的操作系统没有安装mysql,项目中需要使用到,于是安装了最新版本的mysql8.0.28(我安装的是社区版),如果你的项目是老项目,使用的mysql插件是比较老的版本,安装…

    数据库 2023年5月24日
    0225
  • Linux 服务管理

    Linux 服务管理 1. 基本介绍 服务的本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如mysqld,sshd,防火墙等,因此我们又称为守护线程…

    数据库 2023年6月6日
    0114
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球