【MySQL】数据库——事务

一.事务概念

  • 事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行
  • 事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元
  • 事务适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等
  • 事务通过事务的整体性以保证数据的一致性
  • 事务能够提高在向表中更新和插入信息期间的可靠性

总结:事务就是一组数据库操作序列(包含一个或多个SQL操作命令),事务会把所有操作看作是一个不可分割的整体向数据库系统提交或撤销操作,所有操作要么都执行,要么都不执行。

二、事务的ACID特点

原子性: 事务管理的基础。        把事务中的所有操作看作是一个不可分割的工作单元,要么都执行,要么都不执行
一致性: 事务管理的目的。        保证事务开始前事务结束后数据的完整和一致
隔离性: 事务管理的手段。        使多个事务并发操作同一个表数据时,每个事务都有各自独立的数据空间,事务的执行不会受到其它事务的干扰。可通过设置隔离级别来解决不同的一致性问题。
持久性: 事务管理的结果。        当事务被提交以后,事务中的命令操作修改的结果会被持久化保存,且不会吧被回滚

三、典型的不一致性问题?

当多个客户端并发地访问同一个表时,可能出现下面的一致性问题:

第一种:脏读

脏读就是多个事务都在运行中,其中事务a修改完数据以后并没有结束事务,事务b能看到事务a的修改结果,这就是脏读。

第二种:不可重复读

不可重复读就是多个事务在运行中,其中事务a修改了数据并提交以后,事务b能看到事务a的修改,这就是不可重复读

第三种:幻读

幻读就是多个事务在运行过程中,事务a修改了表数据的所有行,此时事务b也插入了一条数据,并且事务b提交事务,此时事务a能看到事务b的数据,这就是幻读

第四种:丢失更新

丢失更新的时候,多个事务在进行中,此时事务b对某字段进行了修改并提交,此时事务a并不知情,同时对该字段进行了修改,覆盖了事务b的修改,这就是丢失更新。

四、隔离级别

指在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间

  •  对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务
  • 修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据
  • 也就是说并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的

隔离级别分为四种,用以控制事务所做的修改,并将修改通告至其它并发的事务

(1)未提交读(Read Uncommitted(RU)):

  • 允许脏读,即允许一个事务可以看到其他事务未提交的修改

(2)提交读(Read Committed(RC)):这是oracle 和 SQL server的默认隔离级别

  • 允许一个事务只能看到其他事务已经提交的修改,未提交的修改是不可见的。防止脏读。

3)可重复读(Repeatable Read(RR)):——mysql默认的隔离级别

  • 确保如果在一个事务中执行两次相同的语句,都能得到相同的结果,不管其他事务是否提交这些修改。
  • 可以防止脏读和不可重复读。有条件的不允许幻读(InnoDB存储引擎可以不允许)

(4)串行读(Serializable):——相当于锁表

  • 完全串行化的读,将一个事务与其他事务完全地隔离。每次读都需要获得表级共享锁,读写相互都会阻塞。
  • 可以防止脏读,不可重复读取和幻读,(事务串行化)会降低数据库的效率。

五、隔离级别设置

设置:

设置隔离级别:
全局级别的设置:
set global transaction isolation level 隔离级别名称;     
#可在所有会话有效,需要重新登录才可生效会话级别的设置:
set session transaction isolation level 隔离级别名称;    
#在当前会话中立即生效设置全局事务隔离级别:
set global transaction isolation level read committed; ##永久生效
set @@global.tx_isolation='read-committed';   #重启服务后失效设置会话事务隔离级别:
set session transaction isolation level repeatable read;
set @@session.tx_isolation='repeatable-read';  #重启服务后失效

查询:

查询全局事务隔离级别:
show global variables like '%isolation%';
SELECT @@global.tx_isolation;查询会话事务隔离级别:
show session variables like '%isolation%';
SELECT @@session.tx_isolation; 
SELECT @@tx_isolation;

like表示模糊查询 百分号相当于通配符*的作用

隔离级别在MySQL中是一个变量

show variables;     #表示查看MySQL的变量

 六、事务管理操作命令

begin;             #开启一个事务
....        create database/table    insert into    update XXX set   delete from      #事务性操作
savepoint XX;      #在事务中创建回滚点
rollback to XX;    #在事务中回滚操作到指定的回滚点位置
commit; 或 rollback;    #提交或回滚结束事务

set 设置控制事务

set [global/session]  autocommit = 0/1;    #0关闭自动提交,1开启自动提交。Mysql默认为1
show  [global/session]  variables like 'autocommit';   #查看Mysql中的AUTOCOMMIT值

我们登录MySQL的时候 每一条命令都能直接生效保存,并没有commit和rollback是因为有自动提交事务变量,每一条增删改命令看做一条事务,然后自动提交。

如果设置为0,就是关闭自动提交,那么会将登录后的所有的操作命令看做一个事务,最终需要commit提交一下,否则不生效!

如果没有开启自动提交,当前会话连接的mysql的所有操作都会当成一个事务直到你输入rollback|commit;当前事务才算结束。当前事务结束前新的mysql连接时无法读取到任何当前会话的操作结果
如果开起了自动提交,mysql会把每个sql语句当成一个事务,然后自动的commit

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

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

相关文章

【漏洞复现】脸爱云一脸通智慧管理平台 SystemMng 管理用户信息泄露漏洞(XVE-2024-9382)

0x01 产品简介 脸爱云一脸通智慧管理平台是一套功能强大,运行稳定,操作简单方便,用户界面美观,轻松统计数据的一脸通系统。无需安装,只需在后台配置即可在浏览器登录。 功能包括:系统管理中心、人员信息管理中心、设备…

git clone自己的私有仓库

大家好,今天来教大家一个简单实用的操作——如何在自己的电脑上git clone自己的私有仓库。无论是工作还是学习,我们都可能会用到GitHub这样的代码托管平台来管理我们的项目,那么如何快速、安全地将这些项目下载到本地呢?下面就是详…

Web服务器与Apache(LAMP架构+搭建论坛)

一、Web基础 1.HTML概述 HTML&#xff08;Hypertext Markup Language&#xff09;是一种标记语音,用于创建和组织Web页面的结构和内容&#xff0c;HTML是构建Web页面的基础&#xff0c;定义了页面的结构和内容&#xff0c;通过标记和元素来实现 2.HTML文件结构 <html>…

Zoho邮箱怎么注册?最强完整指南

Zoho企业邮箱&#xff0c;凭借其16年的产品历程和卓越的服务品质&#xff0c;已经成为全球超过1800万企业级客户的信赖之选。今天&#xff0c;我们将手把手教你如何注册Zoho邮箱。 一、Zoho邮箱是什么&#xff1f; Zoho邮箱是Zoho Workplace套件中的核心产品&#xff0c;专门…

Redis数据库的删除和安装

Redis数据库的删除和安装 1、删除Redis数据库2、下载Redis数据库 1、删除Redis数据库 没有下载过的&#xff0c;可以直接跳到下面的安装过程↓ 我们电脑中如果有下载过Redis数据库&#xff0c;要更换版本的话&#xff0c;其实Redis数据库的删除是比较简单的&#xff0c;打开我…

常见加密方式:MD5、DES/AES、RSA、Base64

16/32位的数据&#xff0c;最有可能就是使用md5加密的 使用对称加密的时候&#xff0c;双方使用相同的私钥 私钥&#xff1a;单独请求/隐藏在前端的隐藏标签当中 二、RSA非对称密钥加密 公钥加密&#xff0c;私钥解密 私钥是通过公钥计算生成的 加密解密算法都在js源文件当…

数电大作业-四输入表决器

&#xff08;PCB和multisim仿真画的有很大问题&#xff0c;没有VCC输入和GND&#xff0c;没学过直接裸画的&#xff0c;之后会好好看视频学习&#xff09; 应用背景&#xff1a; 四个评委&#xff0c;三个及以上评委同时按下通过按钮时&#xff0c;选手才能通过。否则不通过。…

微信小程序 引入MiniProgram Design失败

这tm MiniProgramDesign 是我用过最垃圾的框架没有之一 我按照官网的指示安装居然能安装不成功,牛! 这里说明我是用js开发的 到以上步骤没有报错什么都没有,然后在引入组件的时候报错 Component is not found in path “./miniprogram _npm/vant/weapp/button/index” (using…

20240507-招商证券 基于鳄鱼线的指数择时及轮动策略

动量震荡指标构造 动量震荡指标为交易者提供了获利的钥匙。动量震荡指标测算了5根价格柱相对于34根价格柱的动量变化。首先计算最近5根价格柱的最高价和最低价间的中点的简单移动平均值&#xff0c;即(最高价最低价)12的简单移动平均&#xff0c;将得出的值减去最近34根价格柱…

创建App

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Django项目中&#xff0c;推荐使用App来完成不同模块的任务&#xff0c;通过执行如下命令可以启用一个应用程序。 python manage.py startapp app…

MES管理系统中的仓库管理功能有哪些用途

在当今制造业迅猛发展的背景下&#xff0c;企业对于车间生产调度的需求日益迫切。为此&#xff0c;MES管理系统应运而生&#xff0c;它作为一款专注于车间生产调度的管理信息系统&#xff0c;正逐步成为制造业提升生产效率、优化资源配置的利器。特别是其在仓储和物流管理方面的…

封装了一个优雅的iOS转场动画

效果图 代码 // // LBTransition.m // LBWaterFallLayout_Example // // Created by mac on 2024/6/16. // Copyright © 2024 liuboliu. All rights reserved. //#import "LBTransition.h"interface LBPushAnimation:NSObject<UIViewControllerAnimated…

Pikachu靶场--文件上传

参考借鉴 Pikachu靶场之文件上传漏洞详解_皮卡丘文件上传漏洞-CSDN博客 文件上传漏洞&#xff1a;pikachu靶场中的文件上传漏洞通关_pikachu文件上传通关-CSDN博客 client check 在桌面新建一个文件夹&#xff0c;准备一个hello.php文件&#xff0c;文件写入如下代码 <?p…

0803功放3

1.甲乙类互补堆成功放&#xff0c; 理想12v t提供静态偏置&#xff0c;消去交越失真 2.12V Po(12)2/2RL 3.电压并联负反馈 并联减小输入电阻 电压减小输出电阻 4.-Rf/Ri 这个问题是工艺问题引起的&#xff0c;最早用PNP管用的锗管&#xff0c;后面硅工艺成熟后用的就是硅管&…

【刷题篇】链表

文章目录 1、两数相加2、两两交换链表中的节点3、 重排链表4、 合并 K 个升序链表5、 K 个一组翻转链表 1、两数相加 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数…

Ubuntu系统使用快速入门实践(八)—— git 命令使用

Ubuntu系统使用快速入门实践系列文章 下面是Ubuntu系统使用系列文章的总链接&#xff0c;本人发表这个系列的文章链接均收录于此 Ubuntu系统使用快速入门实践系列文章总链接 下面是专栏地址&#xff1a; Ubuntu系统使用快速入门实践系列文章专栏 文章目录 Ubuntu系统使用快速…

Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点

文章目录 一、通信机制1、轮询1.1、短轮询1.2、长轮询 2、Websocket3、Server-Sent Events 二、区别1、连接方式2、协议3、兼容性4、安全性5、优缺点5.1、WebSocket 的优点&#xff1a;5.2、WebSocket 的缺点&#xff1a;5.3、SSE 的优点&#xff1a;5.4、SSE 的缺点&#xff1…

JVM常见问题

文章目录 1 JVM组成1.1 JVM由那些部分组成&#xff0c;运行流程是什么&#xff1f;1.2 什么是程序计数器&#xff1f;1.3 你能给我详细的介绍Java堆吗?元空间(MetaSpace)介绍 1.4 什么是虚拟机栈1.5 堆和栈的区别1.6 能不能解释一下方法区&#xff1f;1.5.1 概述1.5.2 常量池1…

ROS 机器人运动控制

ROS 机器人运动控制 机器人运动 当我们拿到一台机器人&#xff0c;其配套的程序源码中&#xff0c;通常会有机器人核心节点&#xff0c;这个核心节点既能够驱动机器人的底层硬件&#xff0c;同时向上还会订阅一个速度话题。我们只需要编写一个新的节点&#xff08;速度控制节点…

playwright录制脚本原理

Paywright录制工具UI 在上一篇博客中介绍了如何从0构建一款具备录制UI测试的小工具。此篇博客将从源码层面上梳理playwright录制原理。当打开playwright vscode插件时&#xff0c;点击录制按钮&#xff0c;会开启一个新浏览器&#xff0c;如下图所示&#xff0c;在新开浏览器页…