[MySQL--基础]事务的基础知识

在这里插入图片描述

前言

⭐Hello!这里是欧_aita的博客。
⭐今日语录:生活中最重要的决定就是要做出决定。
⭐个人主页:欧_aita
ψ(._. )>⭐个人专栏:
数据结构与算法
MySQL数据库

在这里插入图片描述

在这里插入图片描述

事务的目录📕

  • 前言
  • 事务简介🚀
  • 事务操作🚀
    • 准备数据
    • 方式一
      • 查看/设置事务提交方式
      • 提交事务
      • 回滚事务
      • 演示
    • 方式二
      • 开启事务
    • 提交事务
      • 回滚事务
      • 演示
  • 事务四大特性(ACID)🚀
  • 并发事务问题🚀
  • 事务隔离级别🚀
    • 查看事务隔离级别
    • 设置事务隔离级别

事务简介🚀

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

在这里插入图片描述
举个例子,在银行转账的过程中,分为三步:

  • 第一步查询张三账户余额是否足够转账
  • 张三余额扣除相应数目
  • 李四银行账户余额增加相应数目

但是,如果在李四余额增加的过程中出现异常,则同时所有操作取消。
这个实例可以帮助我们有效理解事务。

默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句时,MySQL会立即隐式的提交事务。

事务操作🚀

准备数据

create table account(id int auto_increment primary key comment '主键ID' ,name varchar(10) comment '姓名' ,money int comment '余额'
)comment '账户表' ;
insert into account (id,name,money) values (null,'张三',2000),(null,'李四',2000);

方式一

查看/设置事务提交方式

SELECT @@autocommit;
SET @@autocommit;

提交事务

COMMIT;

回滚事务

ROLLBACK;

演示

1.目前账户状况
在这里插入图片描述
2.开始操作

-- 转账操作
-- 1.查询张三账户余额select  * from account where name = '张三';-- 2.将张三账户余额-1000update account set money = money - 1000 where name = '张三' ;-- 3.将李四账户余额+1000update account set money = money + 1000 where name = '李四' ;

3.转账成功
在这里插入图片描述


以上是自动提交,接下来改一下提交方式,修改为手动提交

  1. 查看提交方式
select @@autocommit;

此时值若为1,就是自动提交
在这里插入图片描述

  1. 修改为手动提交
set @@autocommit = 0;  -- 设置为手动提交

此时若值为0,就是手动提交
在这里插入图片描述
3.开始转账操作

-- 转账操作
-- 1.查询张三账户余额select  * from account where name = '张三';-- 2.将张三账户余额-1000
给出一个异常
update account set money = money - 1000 where name = '张三' ;-- 3.将李四账户余额+1000update account set money = money + 1000 where name = '李四' ;

发现有异常,此时由于还没有提交,选择回滚事务后重写编写SQL语句再提交。原本的数据不会发生变化,在最后再使用提交。

-- 回滚事务
rollback;
-- 提交事务
commit;

方式二

开启事务

START TRANSACTION;

或者

BEGIN;

两者具有相同的作用

提交事务

COMMIT;

回滚事务

ROLLBACK;

演示

start transaction ;-- 1.查询张三账户余额select  * from account where name = '张三';-- 2.将张三账户余额-1000update account set money = money - 1000 where name = '张三' ;chenxu
-- 3.将李四账户余额+1000update account set money = money + 1000 where name = '李四' ;-- 提交事务
commit;-- 回滚事务
rollback;

事务四大特性(ACID)🚀

  • 原子性事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性事务完成时,必须是所有的数据都保持一致状态。
  • 隔离性数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

并发事务问题🚀

问题描述
赃读一个事务读到另一个事务还没有提交的数据
不可重复读一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
幻读一个事务按照条件查询数据时,没有对应的的数据行,但在插入数据时,又发现这行数据已经存在,好像出现了“幻影”。

事务隔离级别🚀

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

从上向下,隔离级别越来越高,但是效率却越来越低。

查看事务隔离级别

SELECT @@TRANSACTION_ISOLATION;

设置事务隔离级别

SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

在这里插入图片描述

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

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

相关文章

Spring boot 使用Redis 消息发布订阅

Spring boot 使用Redis 消息发布订阅 文章目录 Spring boot 使用Redis 消息发布订阅Redis 消息发布订阅Redis 发布订阅 命令 Spring boot 实现消息发布订阅发布消息消息监听主题订阅 Spring boot 监听 Key 过期事件消息监听主题订阅 最近在做请求风控的时候,在网上搜…

javaee实验:Spring Boot 整合 Mybatis

目录 MybatisMyBatis 框架简介Mybatis 框架执行流程图映射器 实验目的实验内容实验过程数据库准备项目结构代码实现 实验结果 Mybatis MyBatis 框架简介 Mybatis 的前身是 Apache 的开源框架 iBatis,与 Hibernate 一样是一个 Java 持久层的框 架。Mybatis 的优势在…

SpringBoot框架+原生HTML开发,基于云端SaaS服务方式的电子病历编辑器源码

一体化电子病历编辑器源码,电子病历系统 一体化电子病历系统基于云端SaaS服务的方式,采用B/S(Browser/Server)架构提供,覆盖了医疗机构电子病历模板制作到管理使用的整个流程。除实现在线制作内容丰富、图文并茂、功能…

题目:回文判定(蓝桥OJ 1371)

题目描述&#xff1a; 解题思路&#xff1a; 可以采用双指针判断&#xff08;这里说的指针其实是用下标表示&#xff09;。 题解&#xff1a; #include<bits/stdc.h> using namespace std;const int N 1e6 9;//注意大小 char s[N];//在全局写&#xff0c;默认内部为空…

常见动物经济手术3d模拟交互演示教学实现了教育资源的共享

动物常见病防治是兽医必备的技能&#xff0c;为了让实习兽医在上岗作业前拥有丰富的常见病防治经验。借助动物常见病防治VR虚拟仿真技术开展动物常见病防治VR模拟实操培训&#xff0c;能极大方便院校实训。 提高教学质量 传统的动物医学教学往往依赖于理论知识和实验室实践&…

RHEL8_Linux硬盘管理

主要介绍Linux磁盘管理 了解分区的概念对硬盘进行分区常见的分区swap分区的管理 1.了解分区的概念 1&#xff09;新的硬盘首先需要对其进行分区和格式化&#xff0c;下面来了解以下硬盘的结构&#xff0c;如图。 2&#xff09;硬盘的磁盘上有一个个圈&#xff0c;每两个圈组…

Axure原型图表组件库,数据可视化元件(Axure9大屏组件)

针对Axure制作的大屏图表元件库&#xff0c;帮助产品经理更高效地制作高保真图表原型&#xff0c;是产品经理必备元件工具。现分享完整的组件库&#xff0c;大家一起学习。 本组件库的图表模块&#xff0c;已包含所有常用的图表&#xff0c;以下为部分组件截图示意。文末可下载…

Halcon reduce_domain和scale_image的作用

在Halcon中&#xff0c;reduce_domain是用于缩小图像域&#xff08;Image Domain&#xff09;的操作。 它的作用是通过指定一个感兴趣区域&#xff08;ROI&#xff0c;Region of Interest&#xff09;&#xff0c;将图像数据限制在该区域内&#xff0c;从而实现对图像进行裁剪…

uni-app 微信小程序之好看的ui登录页面(一)

文章目录 1. 页面效果2. 页面样式代码 更多登录ui页面 uni-app 微信小程序之好看的ui登录页面&#xff08;一&#xff09; uni-app 微信小程序之好看的ui登录页面&#xff08;二&#xff09; uni-app 微信小程序之好看的ui登录页面&#xff08;三&#xff09; uni-app 微信小程…

如何优雅使用 vue-html2pdf 插件生成pdf报表

使用 vue-html2pdf 插件 业务背景&#xff0c;老板想要一份能征服客户的pdf报表&#xff0c;传统的pdf要手撕&#xff0c;企业中确实有点耗费时间&#xff0c;于是github上面看到开源的这个插件就…废话不多说&#xff0c;直接上教程 1.使用下面命令安装 vue-html2pdf npm i…

【dig命令查询方法】

dig&#xff08;Domain Information Groper&#xff09;是一个用于查询DNS&#xff08;域名系统&#xff09;的命令行工具&#xff0c;它可以帮助您获取关于域名的各种信息&#xff0c;如IP地址、MX记录、NS记录等。下面是dig的详细使用教程。 基本语法&#xff1a; dig [ser…

苹果mac电脑如何彻底删除卸载软件?

在苹果电脑上安装和使用软件非常容易&#xff0c;但是卸载软件却可能会变得复杂和困难。不像在Windows上&#xff0c;你不能简单地在控制面板中找到已安装的程序并卸载它们。因此&#xff0c;在这篇文章中&#xff0c;我们将讨论苹果电脑怎么彻底删除软件。 CleanMyMac X全新版…