mysql (事物)

news2024/12/27 16:28:11

一.什么是事物

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

二.事物操作 (这个就是一个理解)

 1.事务特性
 原子性Atomicity:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

一致性Consistency:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。例如:转账前和转账后的总金额不变。

隔离性Isolation:事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务执行时,不能被其他事务的执行所干扰,多个并发执行的事务之间要相互隔离。(通过事务的隔离级别保证隔离性)

持久性Durability:指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

2.事物的隔离级别会产生的问题

脏读:读取其他事物未提交的数据 

不可重复度:读取其他事物已经提交修改

幻读:读取其他事务插入的操作

下面有具体设置隔离级别的案例

扩展:这个说的是原子性和隔离性没有关系

通过以下命令查看MySQL事物的提交方式

select @@autocommit

1是自动提交  0是手动提交

mysql中的事物默认自动提交。

可以将mysql中的事物设置为手动提交。

  2.1查看/设置事物的提交方式

       创建表并插入数据

       CREATE TABLE `test_01` (
       `id` int DEFAULT NULL COMMENT '主见id',
       `name` varchar(10) DEFAULT NULL COMMENT '姓名',
       `money` int DEFAULT NULL COMMENT '金额'
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci             COMMENT='测试表';

         INSERT INTO test_01 (id,name,money) 
         VALUES (1,'张三',2000), (2,'李四',2000);

  2.2提交事务

  2.3回滚事物

三.脏读,幻读,不可重复读

  脏读过程的理解(切换事物的隔离级别,不同的隔离级别会导致数据的脏读,幻读,不可重复读)

 第一个窗口中查询的数据

 第二个窗口中查询的数据

第一个窗口中开启事物

第二个窗口中开启事物

第一个窗口中开启事物后的查询

第二个窗口中开启事物后的修改并查询

第一个窗口在开启事物后,查询第二个窗口在开启事物并修改数据后的查询

第二个窗口提交事物并查询

第一个窗口在第二个窗口提交事物后,第一个窗口没有提交事物的查询

第一个窗口在提交事物后的查询

总结:在没有关闭inndb自动提交事物和关闭inndb自动提交事物的情况下,都没有发生脏读的情况,都是在各自的窗口中执行各自的操作,另一个窗口的操作并不会对其他窗口有影响。就算是操作(修改,删除,插入)后提交了事物,也不会对其他事物还在进行中的数据有影响。大招(因为我们默认用的隔离级别是 可重复读 (Repeatable read 可重复读) 不会发生 脏读,幻读,不可重复读)

这条查询会返回全局和会话级别的事务隔离级别。全局级别代表服务器级别的默认隔离级别,而会话级别代表当前连接会话的隔离级别。

执行这条查询将返回类似以下的输出:

 SELECT @@GLOBAL.transaction_isolation, @@SESSION.transaction_isolation;

mysql8设置隔离级别

在MySQL 8中,您可以使用SET TRANSACTION语句来设置事务的隔离级别。以下是几个常见的隔离级别设置示例:

1.设置为读未提交(Read Uncommitted):

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

2.设置为读已提交(Read Committed):

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

3.设置为可重复读(Repeatable Read):

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

4.设置为串行化(Serializable):

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

请注意,设置隔离级别必须在启动事务(使用START TRANSACTION)之前进行。一旦事务开始,隔离级别就无法更改。

此外,也可以在MySQL配置文件(通常是my.cnfmy.ini)中设置默认的全局隔离级别,或者为单个会话设置隔离级别。这样做可以影响所有新的连接和事务,不必在每次开始事务时都进行设置。

四.隔离级别的具体实现

参考视频:MySQL事务和锁机制详解_哔哩哔哩_bilibili

事物具体的实现方式

原子性,一致性,持久性 通过redo log 和 undo log 实现

隔离性 通过锁和mvcc(多版本控制)实现

就到这,重新写一篇具体的实现

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

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

相关文章

MongoDB CRUD操作:可重试写入

MongoDB CRUD操作:可重试写入 文章目录 MongoDB CRUD操作:可重试写入使用的先决条件部署的限制支持的存储引擎3.6 MongoDB 驱动程序MongoDB 版本写确认 可重试写入和多文档事务启用可重试写入MongoDB驱动mongosh 可重试的写操作行为持续的网络错误故障切…

46-1 护网溯源 - 钓鱼邮件溯源

一、客户提供钓鱼邮件样本 二、行为分析 三、样本分析 对钓鱼邮件中的木马程序1111.exe文件进行了分析,提交了360安全大脑沙箱云和微步在线云沙箱。 360安全大脑沙箱云显示,该1111.exe文件存在危险,因此在解压时需要谨慎操作,以免触发木马程序。 建议使用360压缩软件进行…

Chrome DevTools

Console 面板 此章节请打开 justwe7.github.io/devtools/console/console.html 一起食用 一方面用来记录页面在执行过程中的信息(一般通过各种 console 语句来实现),另一方面用来当做 shell 窗口来执行脚本以及与页面文档、DevTools 等进行交…

Linux云计算架构师涨薪班就业服务有哪些?

学员一站式就业服务:一次学习,薪资翻倍 简历制作与指导 学员在培训期间,人才顾问会提供简历制作和指导服务,帮助学员制作出一份专业、有吸引力的简历。简历是求职者给招聘单位的第一印象,因此非常重要 模拟面试与技巧指导 为了让…

一种方法实现latex公式中显示空格

要解决的问题 我想要实现latex中出现空格。比如打出 Dice coefficients,然而一般情况下是不会显示出这两个单词之间的空格的,对吧。 解决方法 使用 \verb| |。 D i c e c o e f f i c i e n t s Dice coefficients Dicecoefficients D i c e c o e f f i c i e …

还不会线程池?JUC线程池源码级万字解析

线程池主要解决了两个问题: 第一个是当大量执行异步任务的时候提供较好的性能;在不使用线程池的时候,每次需要执行一个异步任务都需要新建一个 Thread 来进行,而线程的创建和销毁都是需要时间的,所以可以通过线程池来实…

数据集笔记:DGraph 大规模动态图数据集

dgraph-web (xinye.com) 1 数据集介绍 DGraph 是一个有向无权的动态图,包含超过 370 万个节点以及 430 万条动态边DGraph 中的节点表示金融借贷用户,有向边表示紧急联系人关系,每个节点包含脱敏后的属性特征,以及表示是否为金融…

Java 的循环

Java 有三种循环&#xff1a;for&#xff0c;while&#xff0c;do while。 for 基本语法&#xff1a; for (循环变量初始化; 循环条件; 循环变量迭代){循环语句; }程序示例&#xff1a; public static void main(String[] args) {for (int i 0, j 0; i < 3; i, j--) {…

45-2 waf绕过 - XSS 绕过WAF方法

环境准备: 43-5 waf绕过 - 安全狗简介及安装-CSDN博客然后安装pikachu靶场:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客打开pikachu靶场 http://127.0.0.1/pikachu-master/vul/xss/xss_reflected_get.php 使用常见payload被安全狗拦截…

树莓派 AI 套件,售价 70 美元

系列文章目录 前言 2024 年 6 月 4 日 Naush Patuck 如果您曾想在您的 Raspberry Pi 5 上尝试神经网络、人工智能和机器学习&#xff0c;我们为您准备了完美的产品&#xff1a;Raspberry Pi AI Kit。AI Kit 是与 Hailo 合作开发的&#xff0c;它提供了一种便捷的方法&…

STM32F103C8T6基于HAL库移植uC/OS-III

文章目录 一、建立STM32CubeMX工程二、移植1、 uC/OS-III源码2、移植过程 三、配置相关代码1、bsp.c和bsp.h2、main.c3、修改启动代码4、修改app_cfg.h文件5、修改includes.h文件6、修改lib_cfg.h文件 四、编译与烧录总结参考资料 学习嵌入式实时操作系统&#xff08;RTOS&…

OpenStack学习笔记之三:用软件定义的理念做安全

第3章 用软件定义的理念做安全 1.不进则退&#xff0c;传统安全回到“石器时代” 1.1 企业业务和IT基础设施的变化 随着企业办公环境变得便利&#xff0c;以及对降低成本的天然需求&#xff0c;企业始终追求IT集成设施的性价比、灵活性、稳定性和开放性。而云计算、移动办公…

HAL STM32F1 通过查表方式实现SVPWM驱动无刷电机测试

HAL STM32F1 通过查表方式实现SVPWM驱动无刷电机测试 &#x1f4cd;相关篇《基于开源项目HAL STM32F4 DSP库跑SVPWM开环速度测试》 ✨针对STM32F1系列&#xff0c;硬件上没有可用的浮点单元&#xff08;FPU&#xff09;&#xff0c;为了实现特定函数的浮点运算快速计算&#xf…

独立游戏之路 -- TapTap广告收益损失和常见问题

一个操作带来的TapTap广告收益损失 一,收益损失1.1 广告入口1.2 损失对比二,常见问题2.1 有展现量没有预估收益 /eCPM 波动大?2.2 新建正式媒体找不到预约游戏2.3 聚合模式由于没有回传 oaid 无数据2.4 每日观看次数限制是否有限制一,收益损失 1.1 广告入口 TapTap广告联…

针对业务系统的主备容灾实战原理-基础版

1、前言 本文主要在于介绍&#xff1a;通过系统的实时容灾功能模块&#xff0c;针对用户云计算中关键业务系统的主备容灾方案原理。 涉及到的技术能力、运维能力要求偏高&#xff0c;遂本文尽量将容灾原理讲解清楚。需要用到的云计算能力包括&#xff1a;计算机操作系统(Linu…

初入阿里云,上手走一波

初入阿里云&#xff0c;上手走一波 一阶&#xff1a;ECSMysqlDMS安装Mysql初始化MysqlMysql操作DMS管理Mysql 二阶&#xff1a;ECSOSS远程连接ECSOSS控制台其他图片服务 三阶&#xff1a;更多搭配操作 可以说个人在日常使用过程中&#xff0c;操作最多的阿里云产品就是阿里云服…

【el-tooltips改造】Vue实现文本溢出才显示el-tooltip,否则不显示el-tooltips

实现原理&#xff1a; 使用disabled属性控制el-tooltip的content显示与隐藏&#xff1b; 目标&#xff1a; 1行省略、多行省略、可缩放页面内的文本省略都有效。 实现方式&#xff1a; 1、自定义全局指令&#xff0c;tooltipAutoShow.js代码如下&#xff08;参考的el-table中的…

【Python学习路线(课程大纲+Python视频教程+下载地址)_python 教程下载。】

目前Python已经成为最受欢迎的程序设计语言之一。Python的设计哲学是“优雅”、“明确”、“简单”。 学习Python具有多重显著的好处。首先&#xff0c;Python的语法简洁易读&#xff0c;降低了编程的入门门槛&#xff0c;使初学者能够更快地掌握编程的基本概念。其次&#xff…

自定义拦截器

大家好&#xff0c;这里是教授.F 前菜&#xff1a; 拦截器是由springmvc来接管的&#xff0c;过滤器使用服务器来接管的。 ● 自定义拦截器的三个方法[自定义的拦截器必须实现 HandlerInterceptor 接口] 1. preHandle()&#xff1a;这个方法在业务处理器处理请求之前被调用&…

SVG不保持横纵比,完全由设置宽高任意拉伸填充

想要通过变形伸缩 填充元素的方式使用 svg&#xff0c;试了很多办法&#xff0c;终于找到的。 之前试过img形式显示svg虽然合适变形伸缩&#xff0c;但不能设置颜色。下面是正确效果的使用说明。 在源码svg中加 preserveAspectRatio"none" <svg width"…