Mysql 学习(十 四)事务简介

为什么要有事务?

  • 数据库的出现其实是有应用场景的,最好的例子就是交易,以前的交易是通过账本记录的,也就是通过纸和笔来记录,而数据库的出现大大提升了效率,但是现实中的有些问题,数据库也需要解决的,而事务就是为了解决其中一个问题,下面我们通过一个真实的业务场景来说说为什么要有事务
  • A 和 B 是一对朋友,他们都在银行有账户,并且往里面存了 10 元钱,反映到数据库中就是下图:
    在这里插入图片描述
  • 现在A 要给 B 转5元,具体操作如下:
    • A 的账户金额少5元
    • B 的账户金额多5元
  • 这么看还没有什么问题,因为 在现实中看来 就是一个操作 A 给 B 账户转了5元,具体的操作是数据库中的操作,但是问题来了,假设数据库在进行 B 的 账户金额多5元这个操作的时候,突然断电怎么办?我们知道 在对某个页面进行读写访问时,都会先把这个页面加载到Buffer Pool中,之后如果修改了某个页面,也不会立即把修改同步到磁盘,而只是把这个修改了的页面加到Buffer Pool的flush链表中,在之后的某个时间点才会刷新到磁盘。所以这个时候出现意外,导致 A的账户少了5元,但是B的账户并没有多出5元,导致5元不翼而飞,这是一个很严重的问题。
  • 怎么解决呢?
  • 当然是使用事务,事务如何解决这个问题呢?这个时候就需要理解现实世界中的一些规则

四大规则

原子性

  • 现实中做事情要不全做,要不全不做的规则就是原子性
  • 比如 刚才转账的行为,不可能只转一半,对于现实来说转账就是一个完整的操作。

隔离性

  • 现实中每一步操作都是隔离开的,互不影响的规则就是隔离性
  • 比如 A转账B两次,每次都是5 元,那A的账户肯定少10元,B的账户肯定多10元

一致性

  • 现实中 数据 始终保持正确,完整和有效

持久性

  • 当现实世界的一个状态转换完成后,这个转换的结果将永久的保留,这个规则称为持久性。

事务的概念

  • 上面四个特性也是现实世界中状态转换过程需要特性,根据这四个特性我们可以定义一下事务,把需要保证原子性、隔离性、一致性和持久性的一个或多个数据库操作称之为一个事务。
  • 事务也有状态的,在不同的阶段,事务主要可以划分为这几个状态:
    • 活动:事务对应的数据库操作正在执行过程中时,我们就说该事务处在活动的状态。
    • 部分活动:当事务中的最后一个操作执行完成,但由于操作都在内存中执行,所造成的影响并没有刷新到磁盘时,我们就说该事务处在部分提交的状态。
    • 失败:当事务处在活动的或者部分提交的状态时,可能遇到了某些错误(数据库自身的错误、操作系统错误或者直接断电等)而无法继续执行,或者人为的停止当前事务的执行,我们就说该事务处在失败的状态。
    • 中止:如果事务执行了半截而变为失败的状态,就是要撤销失败事务对当前数据库造成的影响。我们把这个撤销的过程称之为回滚
    • 提交:当一个处在部分提交的状态的事务将修改过的数据都同步到磁盘上之后,我们就可以说该事务处在了提交的状态。
      在这里插入图片描述

事务的语法

  • 开启事务:
    • BEGIN ;
    • START TRANSACTION;:START TRANSACTION语句后边还可以跟随几个修饰符
      • READ ONLY:标识当前事务是一个只读事务,也就是属于该事务的数据库操作只能读取数据,而不能修改数据。
        在这里插入图片描述

      • READ WRITE:标识当前事务是一个读写事务,也就是属于该事务的数据库操作既可以读取数据,也可以修改数据。
        在这里插入图片描述

      • WITH CONSISTENT SNAPSHOT:启动一致性读
        在这里插入图片描述

  • 提交事务:
    • COMMIT
      在这里插入图片描述
  • 手动中止事务:
    • ROLLBACK:如果语句执行之后发现,执行错误了,这个时候就需要中止事务,回滚到之前的状态

支持事务的引擎

  • MySQL中并不是所有存储引擎都支持事务的功能,目前只有InnoDB和NDB存储引擎支持
  • 自动提交:在mysql 系统中有一个变量 autocommit ,如果值是 on ,那么我们每次执行一条sql语句就都算是一个独立事务,只有 使用 start transaction 或者 begin 开启一个事务,才不会采用自动提交

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Grafana+Prometheus搭建可视化监控系统实践

基本介绍 Grafana:一个监控仪表系统,可以根据提供的监控数据,生产可视化仪表盘,同时也具有告警通知功能。这里的监控数据来源,目前主要以Prometheus为主(也支持其它数据源),每次展现…

1.26 day3 C++

设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>using namespace std; cla…

CS奇技淫巧之1.1.1.1上线

编者注&#xff1a;本文仅供学习研究&#xff0c;严禁从事非法活动。 前期准备 一个干净的域名 一台VPS 一个CloudFlare账号 CloudFlare配置 Cloudflare 是一家国外的 CDN 加速服务商&#xff0c;提供免费和付费的加速和网站保护服务&#xff0c;百度云加速的国外节点就是和 …

力扣面试题 16.06. 最小差

Problem: 面试题 16.06. 最小差 文章目录 题目描述思路即解法复杂度Code 题目描述 思路即解法 注意本题目的数据范围!!! 1.对数组a与数组b进行排序;获取a与b的数组长度aLen,bLen&#xff0c;定义一个long类型的变量min&#xff1b; 2.分别让两个指针i&#xff0c;j指向数组的开…

ROS 计算图级 小结

ROS 会创建一个连接到所有进程的网络。在系统中的任何节点都可以访问此网络&#xff0c;并通过该网络与其他节点交互&#xff0c;获取其他节点发布的信息&#xff0c;并将自身数据发布到网络上。 在这一层级中最基本的概念包括节点、节点管理器、参数服务器、消息、服务、主题和…

鸿蒙开发会是前端程序员的下一个春天吗?

前言 最近前端的大环境不太行&#xff0c;之前身处在前端的自己薪资也越来越无望了&#xff0c;隐隐约约感觉前端做不下去了&#xff0c;2024前端找不到工作要转行吗&#xff1f; 看新闻的过程中&#xff0c;**发现越来越多的巨头公司融入鸿蒙生态建设&#xff0c;鸿蒙“朋友…

Flink Checkpoint 超时问题和解决办法

第一种、计算量大&#xff0c;CPU密集性&#xff0c;导致TM内线程一直在processElement&#xff0c;而没有时间做CP【过滤掉部分数据&#xff1b;增大并行度】 代表性作业为算法指标-用户偏好的计算&#xff0c;需要对用户在商城的曝光、点击、订单、出价、上下滑等所有事件进…

Soul App深化社交元宇宙生态治理,与用户共建清朗网络家园

近日,新型开放式社交平台Soul App发布了《2023年第二季度Soul生态安全报告》,展现了其在深化社交元宇宙生态治理方面的创新成果。报告显示,第二季度,Soul围绕反诈、引导社交礼仪规范、未成年保护、用户共治众裁、防治网暴骚扰等方面开展用户安全生态专项治理,通过一系列创新举措…

MATLAB字符串编辑常用代码

1.字符串赋值 % 字符串赋值 sabcdefg 2.字符串属性和操作 (1)获取字符串长度 sabcdefg;% 字符串赋值 length(a) % 获取字符串长度 (2)连接字符串 % 连接两个字符串,每个字符串最右边的空格被裁切 s1a s2b s3strcat(s1,s2) 3.字符串比较 % strcmp 比较两个字符串是…

Linux--基础开发工具篇(1)(yum)

1.Linux 软件包管理器 yum 1.1yum是什么&#xff1f;什么是软件包&#xff1f; yum是什么&#xff1f; yum是一个软件下载安装管理的一个客户端&#xff0c;就如小米应用商店&#xff0c;华为应用商城。 Linux中软件包可能有依赖关系--yum会帮助我们解决依赖关系的问题。 什么是…

acrobat调整pdf的页码和实际页码保持一致

Acrobat版本 具体操作 现在拿到pdf的结构如下&#xff1a; pdf页码实际页码1-10页无页码数11页第1页 操作&#xff0c;选择pdf第10页&#xff0c;右键点击 具体设置 最终效果

MySQL 多表查询

文章目录 多表关系一对多多对多一对一 查询合并查询&#xff08;笛卡尔积&#xff0c;会展示所有组合结果&#xff09;&#xff1a;内连接查询外连接查询自连接查询联合查询 union, union all子查询单行子查询列子查询行子查询表子查询 :::success 多表查询&#xff0c;也称为…

Linux/Academy

Enumeration nmap 首先扫描目标端口对外开放情况 nmap -p- 10.10.10.215 -T4 发现对外开放了22,80,33060三个端口&#xff0c;端口详细信息如下 结果显示80端口运行着http&#xff0c;且给出了域名academy.htb&#xff0c;现将ip与域名写到/et/hosts中&#xff0c;然后从ht…

负载均衡-Ribbon-自定义负载均衡算法

1.Ribbon 是什么 SpringCloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具主要功能是提供客户端的软件负载均衡算法&#xff0c;将 Netflix 的中间服务处连接在一起Ribbon的客户端组件提供一系列完整的配置项&#xff0c;如&#xff1a;连接超时、重试等。简…

TCP通信流程以及套接字函数

TCP和UDP的特点&#xff1a; 对于单播&#xff0c;多播&#xff0c;广播的解释&#xff1a; 单播&#xff1a; 一对一通信&#xff0c;目标地址唯一。多播&#xff1a; 一对多通信&#xff0c;目标地址是一个特定的组。广播&#xff1a; 一对全部通信&#xff0c;目标地址是整…

vue3之 websoket发送消息

1.封装websoket var ws null; //建立的连接 var lockReconnect false;//是否真正建立连接 var timeout 6 * 1000 * 5;//30秒一次心跳 var timeoutObj null;//心跳心跳倒计时 var serverTimeoutObj null;//心跳倒计时 var timeoutnum null;//断开 重连倒计时 var global_…

win10安装redis并配置加自启动(采用官方推荐unix子系统)

记录&#xff0c;为啥有msi安装包&#xff0c;还这么麻烦的用linux版本redis的安装方式&#xff0c;是因为从github上下载别人制作的msi报毒&#xff0c;还不止一处&#xff0c;这种链接数据库的东西&#xff0c;用别人加工过的&#xff0c;都报毒了还用就是傻逼了。 所以采用…

Linux---文件系统

在基础IO中&#xff0c;我们所讲的都是对被打开文件的管理&#xff0c;但是不是所有的文件都是被打开的&#xff0c;对那些在磁盘中保存的没有被打开的文件&#xff0c;我们同样也需要管理&#xff0c;这个就像是快递站中等待被人取走的快递&#xff0c;我们需要将它们分门别类…

赋值运算符

注意点&#xff1a;复合赋值运算符&#xff0c;会进行强制类型转换&#xff0c;不会报错 byte b 2; b 3; b; b 2; b为byte类型 b 3; 等价于b b 3;而b3的结果为int类型&#xff1b; 但在此过程中存在强制类型转换&#xff0c;b(byte)(b3);因而不会报错

电脑提示找不到opencl.dll无法继续执行的多种解决方法,实测有效

Opencl.dll文件的丢失可能会引发一系列系统运行与软件功能上的问题。作为一款重要的动态链接库文件&#xff0c;Opencl.dll在计算机中扮演着关键角色&#xff0c;它主要负责支持和实现OpenCL&#xff08;开放运算语言&#xff09;标准&#xff0c;该标准允许程序能够利用多种不…